There's a good overview of what's involved in a JVM here:
http://www.artima.com/insidejvm/ed2/jvm.html
I'd guess the language of choice for implementing a JVM would be C++, with the low level stuff like memory management, thread management, io, etc it would be interacting with the API provided by a particular OS. Higher up features like bytecode interpretation could conceivably be common between platforms.
In terms of implementing something akin to a JVM, the answer to your question (and the difficulty of the task) would depend on the feature set you require. Do however bear in mind, VMs (Java and others) are in part abstractions of the OS and typically mirror the features provided by the OS.