要は、
・そのコンポーネントは文字列を string として返してくる。
・しかし、その内容は UTF-8, Shift_JIS, EUC-JP などさまざま。
という点が問題なのです。

おっしゃるとおり string の内部表現は UTC-16 です。

しかし、実際にコンポーネントが EUC-JP の文字列を string に
入れて返してきたものを、そのまま UTF-16 のつもりで表示すると、
化け化けでまったく表示できないんです。

ですので。

コンポーネントが string に入れてきた文字列は、 UTF-16 のように
みせているが byte[] としてとりだすと元のエンコーディングの
文字列のバイト列のままで、バイト列から正しいエンコーディングに
変換することができるのか。

それとも、そもそも string に入れて返されてきた(もともと UTF で
はない EUC-JP などだった)文字列は、UTF-16 と思って表示すると
化け化けなことから、既に破壊されていて、そこから変換して正しい
文字列を EUC-JP なり UTF-8 なりとして取り出すなんてことは、
不可能なのか。

そのどちらなのかが、わからないのです。