Yay! Managed to re-target CC65 to use my project's VM!
I did't add support for the libc, just my syscalls (that look kind of like old-DOS conio.h).
As you can see it uses more bytes to do the same thing (the equivalent assembler program is ~40 bytes).
But look at the difference: https://gist.github.com/reidrac/eb5ac9d453efe1fc7a63
That link shows C code (clean an easy), generated ASM code (without the runtime) and "hand coded" ASM.
If I'm going to write some programs for my microcomputer, now I can use C ;)