OTP team (and other core commiters) spends horrible amount of time of very qualified engineers into making BEAM very and very parallel on modern multicore architecture. If you have 16 cores instead of 8, it is very hard to be event 1.7 times faster. Mutexes, cache lines, NUMA access — all this can ruin any performance even if you jump from something like ruby 1.8 to plain C.
parallelism allows to keep data separated in small pieces that are much easier to process. All your inefficient O(N!) algorithms can be not so bad, when you work with very small portions of data. It really help.
simplicity and strict rules for immutability of data allows to make very easy and extremely efficient things like dropping whole arena/allocation pools, etc.
Java is known to be comparable with C on linear algorithms, but we know for sure that on our task (massive video streaming) our java-based competitor has the same speed (plus-minus).