The real problem with device drivers is that companies have gotten into the habit of not releasing specs for their hardware. Which is much more literally like buying a car with the hood welded shut that the case of closed source software.
Anyhow, if the hardware could be reverse engineered, drivers could be written in whatever language (C, C , ASM?) given that they were accessing a given set of structures which the device describes.
That is, all devices are basically memory ranges which have different meanings according to the device's state.
So, a small langauge with keywords like state, struct, byte, bit, word, dword... would probally be enough to describe the device.
Writing the driver, and the userland interface, is another two stories... but the device description should be seperate to enable easier revision of the driver.