It’s misleading to say that WASM has no registers in the virtual machine. Function locals behave very much like a static set of registers. The stack machine is mostly used to encode expression computations but ultimately data shuffles around through locals and not through the stack.
This is evident by the lack of “dup” and “swap” instructions which are critical to passing data around in a pure stack machine.