Targeting multiple architectures is a solved problem, as you said with LLVM. I don't know if that's how WASM is currently implemented, as a LLVM front-end, but I'm pretty sure most implementations in fact are proper native compiled, or they intend to be. As I said it would be silly to do it any other way.