Un buen resumen del problema se encuentra acá: http://lua-users.org/wiki/LocalByDefault
El quid del asunto: local por defecto no funciona cuando tenes alcance de variables léxico de verdad (true lexical scoping). Un ejemplo simple es este:
x=1
function f()
x=2
end
f()
print(x)
En ese fragmento de código, como distinguís entre las posibilidades donde el acceso a "x" dentro del bloque es a la misma variable definida afuera, o a una nueva? En una el print imprimiría 1, en la otra 2. La regla local por defecto impide completamente la primer opción. Para que el alcance léxico funcione, hay que distinguir entre creación de variables y asignación.
Y además hay que acordarse que pueden haber múltiples niveles de alcance (funciones definidas adentro de funciones adentro de otras funciones).
Un buen ejercicio es ver qué hacen otros lenguajes, p.ej. Perl o Python, y ver qué consecuencias tiene.