
Now, MS moves more and more to object oriented DLL (based on COM like DirectX etc.) to solve this.
There is also a naming space problem when dealing with procedural programming. With OOP you can use the 'show' method in many different object, even if there is not a single class in common. Within an OS, using procedural approach result in naming problem: look at the WinAPI, sometimes the 'object' name is prefixed (HeapAlloc(), HeapFree() etc.) sometimes not (ShowWindow(), EnableWindow() etc.).
As Mike said, the big advantage of OOP is organization when dealing with big programs. It is easier to make many persons work on the same project as long you have defined the class content and what it should do. Then all class can be seen as individual blackboxes, which are self contained.