But this ruins the entire idea of packaging software in a self-contained way, at least for a large class of programs.
It makes me wonder, does the OS still take its job of hardware abstraction seriously these days?
It does, and one way it does that is by dynamically loading the right driver code for your hardware.
That’s a licensing problem not a packaging problem. A DLL is a DLL - only thing that changes is whether you’re allowed redistribute it
The OS does. Nvidia doesn't.