Writing COM servers in C is not impossible. It is just that COM code is already beefy, it will be quite a bit beefier in C since you don't get help from the built-in v-table support that a compliant C++ compiler generates. Or a class library like ATL. You have to create your own.
A good source for COM example code written in C is the WINE project. For example, the implementation of the IGlobalInterfaceTable interface. Note the GITClassFactoryVtbl in that code, that's the interface dispatch table for the class factory, and StdGlobalInterfaceTableImpl_Vtbl, the dispatch table for IGlobalInterfaceTable.
Not so sure that this will give you a deeper insight in COM programming. It is unlikely you'll ever write a real server like this. Have you written an out-of-process server yet?