I have games on Amiga which take over the system and also come back to OS without it crashing so it's doable. Also, I myself take over Windows 98SE OS and write directly to VGA memory and then restore the OS as if nothing happened. In fact, there's a built in function in Windows 98SE although undocumented that lets you take over video registers.
Tweaking is unrelated to using hardware registers.
But you seem to be missing the obvious. Code is so complicated these days (and hardware banging would not reduce that) that bugs will remain and said bugs cause MUCH greater problems if you are hardware banging than if you are using OS calls and other APIs.
Also, the reason for different versions of Direct X is again partly related to a need to NOT be fully backwards compatible, as its too complicated and actually reduces efficiency in the API.
Often a newer version will remove older functions, because if you for example coding for Direct X 10 there are more efficient ways to do things and than calling some Direct X 9 function. Also, developers often need a push to encourage use of the newer versions as if they don't use it, theres no point in the card supporting it.
Microsoft made a particular point for example of saying Direct X 10 was written specifically to take advantage of Windows Vista, with Direct X 9 still being included for backwards compatibility. They are however, I believe, seperate libraries as a lot of changes in Direct X 10 involved more efficient ways of doing things that would not necessarily work well with some Direct X 9 API calls.
We can even use this example on HTML. Certain tags get deprecated on newer versions to encourage the use of more efficient/clean/powerful ways of rendering a page layout. If that did not happen, we would have an aweful mess of HTML 1 code with CSS. In fact, to some degree that does happen but it would be a whole lot worse if they had not mandated that you cannot do certain things if you are aiming for HTML 3 compliance for example.
So basically, backwards compatibility while being useful is not always a good thing if it means you mixing/matching different ways of doing something. Yes I know, HTML is not the same as banging registers but the reasons why its not a good idea are very similar. The more different ways you can achieve the same thing, the more complicated the code and more likely you cause bugs and/or tread on other software causing instability. You yourself pointed out that with an API you cannot be sure what calling a function is ACTUALLY doing. Therefore is it logical to allow you do hardware banging, when you might be interfering with the code the API is executing?
Doing hardware banging and API calls at the same time is just asking for trouble.
Doing just hardware banging is time comsuming to code, not useful for most people.
So here we are today, mandating ONLY API calls be used. Because its the safest more stable (and legible) way to code.
You also seemed to miss a point I made earlier. We are not arguing that the PC is as good at precise timing as the Amiga, we know it isn't. But the PC is intended to be an all purpose machine not for precise timing. If you want strict timing you would use a more suitable machine, an embedded board of some kind or, guess what, the Amiga. It does not mean the PC is "catching up", its the opposite, as the PC no longer NEEDS that functionality for what people use it for.