any .net core app is a dll, that you run with the dotnet.exe.
dotnet run myapp.dll
the exe is lightweight version of dotnet.exe renamed to your app name. its job is to load and run the .net core dll (matching its name). This is the .net IL host/bootstrapper which contain the jit compiler and the .net core IL vm.
Kestrel is a library included in the .net runtime packages. The host builder in program.cs will look at the args and configuration values to determine if Kestrel will host the pipeline or another library will be used.
again the Kestrel magic is all done by the builder pattern used to configure the program at startup.
https://en.wikipedia.org/wiki/Builder_pattern
note: the old .net framework needed an IL host, but MS updated the windows O/S to detect that an exe was a .net exe and magically used a IL host (which contains the jit compiler). Because .net core is cross platform, this was not done.