The .NET architecture, just like Java's JVM is a huge monolith that is hard to maintain. Pretty much my entire thesis on digital preservation stemmed on the fact that these large virtual machines are not a solution to portability in the long run.
I used to work for a Unity software house a while back (these days I actively reject any contract with the word Unity in it). When Emscripten (pluginless web support) came out Unity was so slow to adapt their sluggish .NET scripting layer that they were stuck with that it was actually worthwhile writing a tiny "clone" of the 4.x API (https://github.com/osen/mutiny). Unity supported Emscripten more than 2 years after UE4. As a company that relied on being an early adopter, Unity really was the worst choice.
People use C and C++ for a reason. And it honestly isn't for safety or "enjoyment". It is portability and lifespan. C *is* the computing platform. Unity's il2cpp and related technologies are a good start but again, is seemingly more complex than it should be.
Obviously this is a hard problem to solve because Unity's target prosumer market do not like the complexities of C++ RAII. And smaller more portable scripting layers like Lua just don't quite have the performance. Epic's UE4 garbage collected C++ is a good balance (Blueprint is not something I would consider personally but interpreted Cling would be a nice choice to cut down those Debug / iteration build times however).
Perhaps if Unity would open up the source, the community could chip in... ;)