I don't think there's any deep connection. "upvar" in Tcl is a language feature. Upvalues in Lua are purely an implementation detail of the interpreter.
If you want all the gritty details, a chapter of Crafting Interpreters walks through a complete implementation of Lua's approach to closures:
I'm not sure about that though I haven't used tcl in a while and was never an expert. I think tcl upvar allows you to explicitly do what lua's closure implementation automatically does.
They aren't the same thing but they are closely related concepts and similar solutions to the same potential problem.
If you want all the gritty details, a chapter of Crafting Interpreters walks through a complete implementation of Lua's approach to closures:
http://craftinginterpreters.com/closures.html