そもそもset stdin [open...]はstdinという名前の変数に新しく出来たファイルハンドル文字列を代入しているだけでしょ。
「stdin」っていう文字列が標準入力を表現するファイルハンドルだよ。

付け替えはたぶん dup を使うんじゃないかな?Tclxに入ってる

package require Tclx

set f [open aaa.txt]
dup $f stdin

puts [read stdin]