When you have a set of functions that may recourse into each other, you can convert them into a iterative one by doing a `while cond {switch function_selector {..}}` block.
It's an ugly piece of code, but because of parsers, there is a huge amount of know how on it.
If they are statically linked, it's not a problem, and since AFAIK wasm doesn't support dynamic linking, the only problem is on crossing security boundaries, that will be probably kept unsolved anyway. (IMO, this one is better left unsolved, it's to complicated a problem to require for interoperability.)
It's an ugly piece of code, but because of parsers, there is a huge amount of know how on it.