I agree with everything you're saying here except for one thing: Delphi was amazing for COM programming. In fact, it took me years of reading complaints about how complicated COM programming was (and thinking everybody is nuts) before I first saw an example of COM done with C++ and realized what people meant. We were doing a ton of COM / COM+ programming in Delphi 5 and we've never had any problems.
Having done a ton of COM programming in Delphi, the problem wasn't that it didn't work that well — the language integration was fantastic, and things like QueryInterface and AddRef/Release were done for you — but the support wasn't quite good enough.
The typelib editor, for example, was atrocious in Delphi 4 (maybe it got better in later versions), and if you wanted to use a COM-based library (MAPI, TAPI, OLE DB, etc.) you couldn't do it without the headers. Since so much of COM came from Microsoft, it felt like fighting a losing battle against the official way of doing COM programming (Visual C++, at the time). Ironically COM programming seemed much worse in VC++, given the lack of language integration.