I think that many misunderstandings regarding tables and their usage
is that the reference manual is not very friendly for a newbie expecting
more traditional data structures. It took me several months to
understand clearly what a table *really is* (in Lua "philosophical"
sense, I mean): it is a (relatively) *low-level* data structuring
mechanism.
The point is that a table is a Lua table, not something else. If you
need a more traditional data structure you can implement it on top of
that. When I need more abstraction in complex applications, I simply see
tables as a low-level implementation mechanism. Otherwise, for simpler
scripts or programs, tables are good as they are.
Remember that one of the goal of Lua team is to provide mechanisms, not
policies.
Dropping a useful feature (#) just because you cannot frame it in a
theoretically satisfying ideal is not useful for the general Lua
community IMO.
BTW, if you feel the need of removing #, try writing scripts simply
ignoring the existence of # and see if they turn out any better. If you
are expert enough you could hack into Lua source and remove that
functionality *and test whether your scripts end up cleaner*.