Без регистрации обойтись можно, но очень хлополтно. Если сервер и клиент выполняются в разных адресных пространствах, то кто-то должен построить для них заместителя и заглушку. Сервер, в принципе, сам может построить заглушку в своём адресном пространстве, но клиенту по-любому её должна загрузить система из внешней библиотеки. Система запрашивает у COM-объекта интерфейс IMarshal, и если объект его реализует, то с его помощью может сам построить заглушку, а также указать системе, какую библиотеку загрузить в адресное пространство клиента, чтобы она построила там заглушку (эту библиотеку тоже должны будете написать вы сам). Но если IMarshal, как это обычно бывает, не реализован, то система проверяет, как интерфейс зарегистрирован в реестре, и ищет соответствующую proxy/stub dll (в случае стандартного маршалинга) или библиотеку типов (в случае универсального маршалинга). И тут, видимо, ничего не сделаешь, они обязаны быть зарегистрированными в реестре, чтобы система их нашла.
Если вас заинтересовал IMarshal, об этом можно почитать здесь:
http://www.rsdn.ru/article/com/marsh.xml#EGFAEНо если ограничения на типы и производительность, которые даёт IDispatch, вас устраивают, намного проще будет использовать его.