To me it sounds like at least the first problem was part of the original implementation
Yes, and so was the second afaik.
and hence a design decision.
I don't understand how you arrive at that conclusion. What design purpose would it serve to keep unaccessible variables referenced? I believe it was plain oversight.
/.../ don't introduce the problem in the first place, /.../
I.e. not introduce statically scoped variables in nested functions at all.
One reason your pet peeve here hasn't been fixed is that it's more complex than what one might believe. A solution that works in the general case would require a refcounter for every variable that gets copied to the dynamic frame.