(Я лучше понимаю, когда пишу, чем когда читаю. Если вам эта писанина бесполезна, просто не обращайте на неё внимания.)
Цель агрегации: образовать общий IUnknown для всех внутренних объектов, каждый из которых имеет свой собственный IUnknown.
* Параметр pUnkOuter метода IClassFactory::CreateInstance передаёт внутреннему объекту ссылку на общий IUnknown. В результате у внутреннего объекта должны оказаться две реализации IUnknown: одна управляет им самим, и видна только внешнему объекту агрегата; вторая, наследуемая всеми его интерфейсами и потому видимая снаружи агрегата, делегирует вызовы на общий IUnknown. Счётчик ссылок на внутренних IUnknown остаётся единицей на всём времени жизни агрегата.
* Внешний объект агрегата создаёт все внутренние объекты, передавая им ссылку на свой IUnknown как на общий. QueryInterface на нём должен, видимо, по цепочке вызывать QueryInterface на управляющих IUnknown внутренних объектов. Вся реализация внешнего объекта сводится, в итоге, к созданию внутренних объектов в IClassFactory::CreateInstance и их поочерёдному опросу в IUnknown::QueryInterface. Вроде как оба куска тривиальные, почему же нет стандартной функции CoCreateAggregateFactory, принимающей массив CLSID (или даже, для гибкости, массив IClassFactory для внутренних классов) и возвращающей IClassFactory для класса-агрегата?
* Наконец, если внешний объект агрегата сам создан как внутренний объект более крупного агрегата, то он передаёт своим внутренним объектам ссылку не на свой IUnknown, а на полученный от своего внешнего объекта IUnknown самого внешнего объекта агрегата. Таким образом можно собирать в один объект целые грозди несвязанных реализаций разнообразных интерфейсов. Только они должны все различаться, и не иметь общих предков, кроме IUnknown, иначе результат QueryInterface окажется зависящим от порядка обхода им внутренних объектов.
* Родными средствами VB агрегация совсем не поддерживается: нельзя ни слепить агрегат из готовых объектов, ни использовать созданные в VB объекты в составе агрегата. Жаль.
(Если я чего-нибудь напутал, буду рад, если меня поправят.)