The problem with runtimes such as WAMR - or really anything besides wasmtime, at the time, - is that you dont get component model compatibility.
If you dont want to write the bindings yourself - which is a huge issue due to loads of code to write, and high maintenance costs - you want it generated.
And auto-generated bindings are rare, there are not a lot of systems for that.
And if you do that, you only have access to that one language you just implemented.
That is one of the huge reasons, why Lua is so popular amongst C/C++ applications, that want to provide a scripting interface.
Its uniquely designed in such a way, that it makes exposing the C++ functions available from Lua, without much action from you.
I feel like its a very sane choice for such a use case, and there has been long no strong alternative to it.
Thanks to the component model of WASI, that changes now.
You can create bindings between the supported host, and the supported guest languages.
The guest languages have to be able to compile to WASM, and to fulfill the conditions the component model asks for.
This way, we can add a ton of languages without much maintenance costs, and with less work to implement them in the first place.
Plus, the runtime performance and the size of the shipped binary is close to native.
I think its a good extension method, and can also be used to extend the engine in other ways.
Like as a plugin format, possibly replacing the native extensions, and unifying both systems.
Another bonus is, that this approach sandboxes the code.