まず、coutの仕様として
あるスレッドがあるバイト列を突っ込むとその通りの順序で出力される、
ということしか決めてないんじゃないの?
operator<< 1回を単位として出力とか、そんなことはわからないんじゃない?

で、スレッドセーフ性は、複数のスレッドから任意のタイミングでcoutにアクセスしても、
こけたりせずに上の仕様を満たした正常動作を行なう、というだけなのでは。
>>18の出力って別にブッ壊れてないよね。
適当にマージされてるから画面は乱れるけど、1つのスレッドが出してる出力に関しては正しい順序で出てるじゃない。
それをスレッドセーフじゃないと言うのは自分にはかなり奇異に映る。

16の期待する動作がしたいのだったら、ロックとflush()を使って
何とかせよ、ということだと思うのだけど。