I would use something like typed racket or haskell for all the critical parts to increase safety. Then I would check the performance bottlenecks and rewrite them in C if needed.
Then I would use a more programmer friendly language on top of that. Something like Scheme, Ruby, Python and the like.
Stratified design, basically.