I could be wrong, but some things I suspect contribute to the continued use of the zmachine and similar VMs in this space:
-
Since games in this genre have remained computationally simple, we’ve never really hit performance issues that make the portability not worth the added overhead. This cannot be said for Java and other bytecode compiled languages used for developing modern style apps and games or for virtualizing one x86 OS on top of another.
-
There’s a lot of legacy games using zmachine and there’s an appeal to being able to play new games in the same fashion you play old games and the genre lends itself to not needing entirely new frameworks to do things the existing frameworks don’t, so there’s less incentive to break from tradition.
-
Because this genre is even more retro than modern indie games that use pixel art resembling 8-bit graphics and music resembling 8-bit chiptunes, I suspect we have just as much overlap with retro hardware fans as the people such deliberately lo-fi video games appeal to, and keeping the zmachine alive makes it easier to play modern IF on hardware from the genre’s hayday as a mainstream genre(or as mainstream as a genre could be in the days when admitting you owned a personal computer was enough to earn the nerd label).
-
It keeps most games in the genre near universally available. Computationally simple these games might be, but if we didn’t have a cross-platform standard, we’d probably have the same problem as mainstream gaming where a lot of PC games are Windows-only or only have native builds for one out of OSX/Linux or a lot of mobile games being iOS or Android exclusive, and vanishingly few available for even a subset of both PC and mobile OSes, and if there is a Linux build in there, it’s probably x86-only, possibly even x86-64 only… And this is a genre so niche that any barrier to universality just fragments a already tiny potential user base.