Lunatic is more opinionated than most of these or node, though, in that it's trying to emulate a particular concurrent system design pattern borrowed from Erlang/BEAM.
All I can say re:wasm /bytecodealliance is wowwee! so many runtimes, so many platforms and intermediate formats.
Bindgen macros in rust is imho one of a hundred reasons to learn and love rust.
Really was impressed by the ability to obviate oci containers was slick.
Here is a comprehensive list of wasm runtimes :
quite a list, it is becoming a new JVM that runs all different languages.
But this whole discussion is out of scope for your use-case. If it's For Fun (tm) that's one thing, but (presumably) this is a practical integration into an existing language. Why are you implementing a VM instead of integrating an existing implementation? Certainly you wouldn't even consider implementing a custom from-scratch implementation of the JVM, the fact that it's even possible to attempt such a thing for WA is already telling about which VM has a better design.
Take your pick: https://github.com/appcypher/awesome-wasm-runtimes