あなたの質問は、シンボル (つまり、関数名) を DLL 内の関数の序数にバインドするための中間ステップとして「インポート ライブラリ」を使用する必要がある Microsoft C++ コンパイラ (MSVC) の問題だけです。それ自体は C++ の問題ではありません。これは間違いなく、MSVC コンパイラの厄介な癖の 1 つにすぎませんが、そのようなスキームを変更する必要があるかどうか、または変更できるかどうかについてコメントする動機については十分に知りません。私の記憶が正しければ、C++Builder コンパイラもこのメカニズムで動作し、MSVC を模倣しています。
他のほとんどのコンパイラは、リンクとバイナリ インターフェイスに関して、GCC の動作方法 (GNU Compiler Collection) に合わせています。そして、それらはこの追加の「インポートライブラリ」を必要とせず、問題のDLLをライブラリの一部として指定して、実行可能ファイルとリンクするだけです。
ところで、C++ リンカと Delphi リンカの違いに関して言えば、あなたが指摘したこの問題は氷山の一角にすぎません。それらは、より深い意味で非常に異なっています。C++ 標準では、リンカは (「個別コンパイル モデル」のため) かなり単純であり、いわばドットを接続するだけである必要がありますが、Delphi では、リンカはコンパイラとより密接にリンクされており、一般的によりスマートです (そして、もっと早く)。