I used Tcl (I didn't really used Tk), and I really liked how the language had no statements and everything was a function/procedure. I remember that in the past (I think currently not needed since now it is built in), you could implement yourself try-catch-finally and would work like rest of the language without feeling like it was hacked through use of macros.
upvar and uplevel were mind-blowing to me when I first learned tcl. It was relatively easy to derive new constructs that felt like part of the language.
Edit: Here it is: https://code.activestate.com/recipes/68396-try-catch-finally... not needed now since latest version has it built in.