I think I have this down, but I'd like to confirm.
With dynamic scope, it doesn't matter whether one uses a nested function or a separate function, as the variables simply depend on the call stack.
With only pure functions involved, it also doesn't matter whether one uses a nested function or a separate function. This is true regardless of the type of scope.
With lexical scope, nested functions roughly mimic calling a function with dynamic scope.
With lexical scope, a program written entirely out of pure functions (perhaps allowing for a single impure print to the standard output) needs no garbage collecting. If it makes a difference, I am specifically thinking of GNU C with the nested function extension for this question.
NOTE: By pure function, I mean totally pure function: the only thing "read" is the parameters, the only thing "written" is the functions return.
Thanks