See the question and my original answer on StackOverflow

COM has the notion of DLL Surrogates:

COM makes it possible to create DLL servers that can be loaded into a surrogate EXE process. This combines the ease of writing DLL servers with the benefits of executable implementation. Development tools like Microsoft Visual Studio facilitate the writing of DLL servers, but a DLL server in itself has limits

dllhost.exe that we often see running (as one or multiple instances) in the background is in fact the default surrogate process, but you can write a custom one: Writing a Custom Surrogate. This is something that is rarely seen.

However when you say "host a COM object so that other processes can communicate with me using simple CoCreateInstance of the COM object", I don't think you need all that plumbing (that can be rather complex to implement). Just host and register the COM object from your Windows Service. It's called an Out-Of-Process COM server as opposed to In-Process COM server (a DLL).