I think most game engines being written in C++ is simply because C and C++ are extremely portable languages. If there were another language that was equally as portable you might see more engines written in that. It doesn't hurt that one of C++'s goals is also to be performance king.I am not sure what you mean by "extremely portable". Yes, in theory they are, but thanks to non standard extensions (although very useful, #pragma once for example), and different architectures, I would say they are most definitely not portable. You have to think about portability in your program design, something most java and C# developers don't even have to think about. C's target isn't to be portable, it is a system language, as I recall, Ritchie and Tompsons target was to have a language offering enough high-level support to not get lost in your code, while having the power to dance with single bits.
Back to topic:
I wrote a program comparing java and C++, the later iterations of java have a good runtime optimisation. Both programs syntactically did the same (as a java programmer would write a C++ program), multiplying BIG matrices. There was no big performance gap between java and C++. But when I rewrote the C++ algorithm to simply use pointer arithmetics, C++ ran several times faster than it's counterpart.
The lesson for me was: Yes, C++ is faster when you know how and you have the right problem to solve. But Java has become fast enough, the performance gap for your everyday business application is negligible.
E: You can even write cool indie game engines with C# and Java. Yes it is not as powerful as a C++ engine, but you don't try to make a better looking, more efficient engine than Source,Unreal and friends, right?