This has been covered over, and over, and over again. CoffeeScript has some explicit goals with respect to the generated JavaScript output, and that includes not mucking with your identifiers. In order to implement correct lexical scoping, you'd need to rewrite identifiers to avoid shadowing and collision. CoffeeScript's design is a very reasonable trade off given the inadequacies of JavaScript.
To achieve that CS would have had to put everything with a new variable inside a new function scope, having a major impact on performance and readability of the generated code.
It's possible to detect name collisions in a compiler and only generate scopes when needed...
Parenscript gets lexical scoping by renaming variables (but only where necessary). It works fine. The original variable name is used as a prefix, so the generated code remains readable.