>>メッセージループってプロセスの共通リソースで管理してるものじゃないの?

詳しくは知りませんが、メッセージキューは、ウィンドウを作るスレッドごとに
ウィンドウズによって作られます。ですから、ウィンドウを作って、メッセージ
ループをまわさないスレッドはそこで止まります。これを避けるために、
VCLのオブジェクトをつくるメソッドはメインスレッドで実行するように
TThread.Synchronize があるのですね。こうすると、メインスレッドの
Application.Run の中のメッセージループの圏内に入るのですね。
TWinControl の派生クラスをメインスレッド以外で作るときは、
Synchronize を使うか、Form1 に適当なメッセージ(WM_APP+55とか)
を投げて、そのハンドラに作らせればよいのかな。ウィンドウをつくらない
スレッドにはメッセージキューは割り当てられません。