Yes, such a tool is called a linker. You generally run it after you compile your application, although in most integrated development environments, this appears as a single step with a clever name like "build".
In other words, the hoops you have to jump through to remove unneeded code and "obfuscate" it for managed languages like C# are absolutely not necessary for C++. The linker will only link in functions that your code uses, and since everything is compiled down to binary, it's already as obfuscated as it is going to get.
Nothing is going to link in the contents of DLLs, though. The whole point of a DLL is that it is dynamically referenced by the executable, that's why it's called a "dynamic link library". If you want a code library that is statically linked in at compile time, you need to use a static library instead of a DLL.