You can do that in base Tcl; the libraries won't exactly help you and unless they've fixed the dynamic scoping problem it had a decade ago when I last looked at it closures would be obnoxious, but the language itself is really clean and simple, very nice. The implementation is horrible and the original designers didn't really understand what they had, which is why you have really weird libraries like Tk that don't compose especially well (briefly: in Tk essentially every GUI object has global scoping and are named; the naming reflects the scope. It's possible to write GUI libraries for it but it's not trivial).