After thinking a while, I suppose the best way to put it for you to grasp the idea would be:
COM is a way to extend Windows API and publish other custom libraries in the system, so that you can discover and work with those new APIs in the same fashion without a need to recompile your application.
COM objects are registered in the system (by adding some hooks into the Windows registry). After that is done, your application can query in run-time existence of those expected libraries, and based on their availability to decide how to proceed further (instead of crashing when a statically linked library not found).
This mechanism is supposed to be language-independent, so any application written in any language should be capable of calling those interfaces and invoking operation of those libraries. In practice, however, some languages do not support some COM types so they get limited COM abilities.
Answering your question in comments:
To use COM no need to install anything. Everything is already there, in the form of WinAPI functions, which you can simply call in your application. DllGetClassObject and CoGetClassObject are used to instantiate COM objects. CoRegisterClassObject is used to register COM objects contained in your libraries in the system.
In order to enable uniform creation and interaction with COM objects, their creation has been entrusted to class factories, these are sort of helper objects. You call CoGetClassObject and ask it to let you talk to the class factory of the object you need. Given the interface to that class library, you ask it to instantiate the object you need. Then you can manipulate the object through interfaces it exposes.
Have a look at this brief overview on the Wikipedia: Component Object Model