Anything below the normal API level can change from one version of Windows to the next.
I was going to say that if you really did want to write a ring 0 driver, you would need to read Microsoft's DDK documentation.
DirectX should, at least partially, be supported under Wine and ReactOS.
If you want cross platform, then you might choose OpenGL. However, both DirectX and OpenGL are libraries...
Yes, many things start out as intimidating. Determination and effort can overcome difficult problems.
However, with regard to complexity, the more complex something is, the more likely you will be to make a mistake, and the harder it will be to maintain and expand. Simplicity is way better than complexity. "Keep it simple, stupid". (I seem to remember Mac saying that, but he's not the only one.)
There is nothing inherently wrong with doing low level stuff, but it is good to keep the program well designed. For example, perhaps keep the low level implementation in one module/class/whatever separate from the high level usage of it in another module, with a simple, well defined interface between the two... (in which case, you are basically writing your own library...)