COM is an 'old technology' in the same way C++ is. Just because it's old doesn't mean it's out-of-date. The reason Microsoft keeps coming back to it (Windows 8 makes big use of it) is because it's a relatively low-overhead object based technology. There's no big run-time to initialize before using COM (although a component could initialize a run-time if it needed to, e.g..NET CCW).
The interface/implementation boundary is kept strictly separate so it is useful for exposing Windows functionality in an object orientated way (as well as DirectX the Windows Shell is based around COM).
COM suffers from a general misunderstanding of what's COM and what's built on top of COM. ActiveX, DCOM, OLE, COM+, etc. are built on COM but do not define what COM is. COM itself as a core technology has been kept relatively simple.
I say relatively because COM is not perfect. The apartment model can cause significant problems, such as cross-apartment marshalling requiring an application to pump a message queue. Back in the late nineties people were going COM mad and making everything out of COM components and it caused unnecessary complexity in applications. However, it's a well tested technology and when used properly it works well, especially for exposing or consuming functionality for 3rd parties. If you want to really understand the Windows API you need to know how COM works.