そもそもの原因は Java なんじゃないか?
上の問題だけど、そもそもの原因は Java の文字型である char が 16 bit であることが原因なんじゃないだろうか。
Java だけに問題があるとは言えないけど、Java は良くも悪くも、結構な影響を他の言語・人・環境等に与えているのは確かだし・・・
まぁ、一番の大元は Unicode 1.0 なんだろうけど、サロゲートペアの導入は Wikipedia によると 1996 年で、JDK 1.1 のリリース*1が 1997 年で、Java 2 のリリース*2が 1998 年なんだから、どっちかの時点で char を 32 bit にするなり、可変長にするなりしておいてくれれば・・・
とは言っても、当時はまだメモリも HDD も制限きつかっただろう*3から、そういう選択肢はなかったのかもしれないけど。