I have a host program that implicitly (with libs and their DLLs) loads DLLs. When I make a memory leak on purpose, in my host program, the CrtDbg* functions detect the leak. When I on purpose make a memory leak in one of the DLLs the leak is not detected.
Note: in my host, I activate the _CrtDumpMemoryLeaks function after the main function has terminated.
More than likely your DLLs are statically linking to the CRT. (or they are a retail build, but your EXE is a debug build). Either way, you have more than one heap. When you call _CrtDeumpMemoryLeaks, it can only track the unreleased memory allocations for the binary that calls is made from. You have two options.
OR