Your question is really only an issue with the Microsoft C++ compiler (MSVC) which requires the use of an "import library" as an intermediate step to bind the symbols (i.e., function names) to the ordinals of the functions in the DLL. It is not a C++ issue per se. This is arguably just one more annoying quirk of the MSVC compiler, but I don't know enough about the motivation for such a scheme to comment on whether it should or could be changed or not. If I remember correctly, the C++Builder compiler also works with this mechanism, imitating MSVC.
Most other compilers align themselves to the way GCC works (GNU Compiler Collection) in terms of linking and binary interfaces. And those do not require this additional "import library", you simply specify the DLL in question as part of the libraries to link with your executable.
Btw, when it comes to differences between the C++ linkers and the Delphi linker, this issue you pointed out is only the tip of the iceberg. They are very different in much deeper ways. The C++ standard pretty much requires the linker to be fairly simple (due to the "separate compilation model"), just connecting dots, so to speak, while in Delphi linker is much more intimately linked with the compiler, and is generally smarter (and faster).