There's also a more portable authoritative & recursive [resolver in C](https://github.com/handshake-org/hnsd).
Plus, the whole protocol for node communication and name resolution & proofs is so simple, that it's pretty easy to reimplement in any language.
I think JS is fine for small to mid-sized tasks, prototyping and testing ideas. However, for real DNS servers, used by a lot of clients, I believe C, C++, Go or Rust would be an absolute requirement.
It binds to libunbound but you are right that you would want a lower level language for it to be more scalable. There is a rust implemention work in progress here: https://github.com/UrkelLabs/rsd
There is also a C light client here: https://github.com/handshake-org/hnsd
For the consensus, there are C bindings for the cryptography and a workerpool that really speeds things up.
It could also be possible to dump the Handshake zone into a zone file and serve from behind unbound.