I guess upstream considers this a feature and there are cases when it is useful. Nevertheless, it is at least unexpected that ^z suspends only ninja process (i.e. preventing it from spawning more children) but keeps the existing children running. A possible major problem is when my system goes to heavy swapping. Normally in that case I'd ^z emerge and look for a solution. However, if a process using Ninja is running, the compiler jobs won't be suspended until they finish...
Can you submit an issue or pull request upstream? It looks like there is quite a backlog, but this really should be addressed there regardless. https://github.com/martine/ninja
I will try to repro with -9999 first