For example, I'm working with a bunch of other people on MirageOS , which is clean-slate, library OS written entirely in OCaml and targets the Xen Hypervisor. Since Xen works on ARM devices, we'll also be able to create applications/appliances for the coming wave of embedded devices (aka Internet of Things) -- in addition to running things on the public cloud.
If you're interested in reading more, there's an ASPLOS paper  where you can find out more. There will also be a CACM article in the New Year that covers more of the wider background.
 http://openmirage.org and http://nymote.org/blog/2013/overview-of-mirage/
Yup, that's definitely a new area. I guess you're using the hypercall API instead of pretending to talk to the raw HW?
In a way, the hypervisor has become "the" OS, while "an" OS is now just an application running within the hypervisor. Can we avoid the additional (hypervisor) layer? I think yes. But: 1) how, and [harder] 2) also while maintaining compatibility with existing applications? (Not existing OS's, just existing applications.)
ps: I love the idea of operating system + ml. I remember BitC tried to bring types on the metal ~without success.