共有関数がーとか言うけどさ、関数を共有化させたところで、内部的にはグローバルstatic変数を使って実装することになるのでは?

非オブジェクト指向で必要なモジュールの数を可変させるのが面倒であるという事実は変わらないと思うよ。

もちろん、static変数を使わずに
struct X;
InitX(X);
UpdateX(X);
みたいな記述もできるけどさ、それってC++言語が選択できなかった時代のC言語組み込み開発におけるオブジェクト指向の実現手段になってしまうよね。かなり原始的だけど。