It's astounding the crap [upvar] lets you get away with, ESPECIALLY making your own loop constructs. I'd be boned without it for doing request parsing without the ability to share a string buffer by name, for instance.
Yes, because you rarely need upvar, but when you do, only tcl has it.
Also, i know of no other language with macro like substitution along with real local variables.