You have to know COM interface of the object to work with, or at least the one or few methods what are necessary for you.
The COM dll you can load dynamically and the dll isn't necessary to be registered.
Here is code example, hope that is what you were mean in your question:
HMODULE hDll = LoadLibrary(_T("Your_Dll.dll"));
typedef HRESULT (WINAPI * pfnDLLGetClassObject)(REFCLSID rclsid, REFIID riid, LPVOID* ppv);
pfnDLLGetClassObject fnDLLGetClassObject = (pfnDLLGetClassObject)GetProcAddress(hDll,"DllGetClassObject");
const CLSID _MyObjectCLSID = CLSID_MyObjectInDll;
const IID _MyObjectInterfaceIID = IID_IMyObject;
IClassFactory * pFactory;
hr = fnDLLGetClassObject(_MyObjectCLSID,IID_IClassFactory,(void**)&pFactory);
IMyObject * pMyObjectInterface;
hr = pFactory->CreateInstance(NULL,_MyObjectInterfaceIID,(void**)&pMyObjectInterface);