Interception and context are wonderful ideas made possible through COM. They teach us in Computer Science 101 how beneficial indirection is, and context and interception are a great example. Because client code never touches an object directly (it touches only the interface), you have an opportunity to inject services by intercepting object method calls and providing object context that's not necessarily part of the object. And the client is none the wiser—it gets the requested interface pointer.
Interception and context remove one more level of detail from the developer's consciousness. So although interception and context don't eliminate the need to write code, they hoist certain critical, bug-prone services to the level of the operating system, thereby letting the developer spend more time in the domain problem space. Currently, transactions are the most common way to add functionality through interception. Look for many services to be layered onto objects this way in the future.