The DirectX team has publicly said that it's not a design goal to be a good COM citizen. They use COM mostly as a language neutral way of accessing created interfaces (calling convention), and doing ref counting. Note that many DX functions that take an COM interface will actually fail if you implement the interface yourself, because the functions up-cast to the internal type they "know" the interface to be.
And, yes, implementing proper COM would add overhead to the D3D implementation, which would slow things down, which would be bad.
Jon Watte, Direct3D MVP
Tweets, occasionallykW X-port 3ds Max .X exporter
kW Animation source code