The loop itself is quite useless, why wasn't it also removed ? (Just kidding)
I don't have anything agains Lua or hash tables in principle. And of course tables are used in practice in CL code, but they aren't the primary data-structure.
> __index can be another table to searched if the lookup on the child fails (which in turn can have its own parent and so on)
> the first time a function like "GL.CreateShader" is called, the lookup fails, and the __index metamethod mangles the index name a bit and in turn calls (on Windows) the C function wglGetProcAddress to look up its address, which it then stores in the original table. Using this library, you can write code that uses GL functions willy-nilly, and their addresses will automatically be looked up at runtime the first time they are used.
So, it is an association list implemented using tables, where links are given by the __index property, using a metatable.
So maybe it is convenient after all to have a very simple data-structure like cons in a language and let more complex data be implemented with it, instead of the opposite.