1. Shaders.
2. C#/Java are JIT languages. Several important platforms which game developers want to target do not allow for the use of JIT, so Unity has a C# to C++ compiler. One might even argue IL2CPP is Unity's most significant "value add" over something like monogame.
3. They appear to have badly messed up at least one thing beyond the speed issues which would be expected from (1) and (2) alone.
@mcc @hikari But Java and C# are both compiled ahead of time into bytecode for their virtual machines. That bytecode is then JITed at execution, as opposed to something like JavaScript or Python which aren't compiled AOT and if JITed then directly from the source code. I don't have much experience with C#, but Java was never fast to compile :P