They aren't exactly equivalent.
The difference comes into play with code loading. The local captures will reference the version of the module they were captured with, while remote/external captures will always reference the latest version of the module.
Depending on what the closure is doing, the latter may be perfectly fine, and is more efficient - but there are many situations where that would result in bugs/unexpected behavior. As a result, the compiler cannot make a choice that works in all situations. Obviously, in situations without hot code loading, this is irrelevant - but you can't know if that is the case at compile-time.
Hope that provides some useful context on why things work the way they do!
Paul