set abc {ABC}
after 1000 {puts $abc}
set abc {AAA}
puts {DEF}

これだと

DEF
AAA

って出力になるから $abc が遅延評価されてるのは判るんだけど

set abc {ABC}
pack [button .hoge -text hoge -command {puts $abc}]
set abc {AAA}

だとボタン押したときに実行されるのが
ABC
の方なんだよね