See the question and my original answer on StackOverflow

COM is "just" a binary-interface standard for software component (from wikipedia). There is no runtime, no set of base/utility classes (well, there are some, like cross thread/process marshaling, the registry, COM+, but you can do COM without it).

COM is used absolutely everywhere in Windows, used in clients and servers, because it's, in its deep heart, "just" a vtable binding contract.

WinRT is a full blown API on top of COM (again, no engine). So, it comes with a set of base classes. It's defacto very oriented for UI applications (Windows Store). WinRT also comes with a set of services (metadata, type system, deployment/store, etc.). An useful WinRT introduction is available here: WinRT demystified

The CLR is the execution engine that powers .NET programs. It can be used on clients and servers. For example, the garbage collector is implemented there. In fact, it's been ported to other platforms than Windows these last years as an open source project: CoreCLR The Windows CLR uses COM only for some of its work, mostly for communicating with the Windows platform. WinRT does not uses the CLR.