I was introduced to TCL/TK one summer when I was working at Sandia National Labs. I had been mostly doing C and ASM for the first part of my career, but the department I was contracted to was going through a dry spell in terms of funding so I got moved over to work with the GPS folks. I had never worked with TCL/TK before, and it was just such a guilty pleasure - you could slam out just about anything with it, in like no time. "Oh, you need to create a system with user-customizable dashboards for satellite telemetry? No problem, give me a few days..." I only worked with it for a few months, but it was some of the best fun I ever had writing code. I guess I feel the same way about react and node.js these days, but TCL/TK was ahead of its time.
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.