ages ago (in java terms), some of the compilers used to bind the jvm and
your classes into an exe that launched the jvm and loaded the classes.
The really intelligent ones made a subset of the jvm which your classes
used. This was before reflection was used much, or that would make a
mess of discerning which jvm classes are used. With the current size of
the jvm, it would be a large exe, unless you did cull unused jvm stuff
though.
It's possible to do it, you just have to be careful with reflection (and
know what parts of the jvm are dependant on each other - I think
reflection is used in the jvm).