I think that having some access to metaprogramming in the core is a missing part of lua
It might make the problem worse, actually. My guesses for some reasons why Lua might be disliked. Lua is:
Used by people who aren't developers, and who find Lua hard because programming in general is hard
Used in poor contexts: it's often bolted on an application to make it more extensible, but often it's neither as well documented nor as well thought out as a mature library from a mature, general purpose programming language. And even if it's properly documented, you have to constantly switch between generic Lua manuals, Lua standard libraries (with the caveat that some of them might not be embedded), and the bindings offered by the application.
Used too rarely: how many wireshark dissectors--or window manager setups--are you going to write in your lifetime? Are you willing to learn a new language, even an accessible one, just for that?
lacking some well established coding conventions. When you take over some Python code that conforms to PEP8, the code is boring in a positive way: you understand what the programmer meant more easily than if he uses:
one of 50 shades of OO framework (if you're lucky and he refrained from writing his own 51st variant),
his own way of packaging stuff...
Lua lets you very free to express yourself creatively, but as soon as you work in a multi-people context, it inflicts other people's creativity upon you: that is way less entertaining.
Metaprogramming makes most of these issues worse: it's incomprehensible to many developers and virtually all non-developers, it causes hard-to-track compilation errors (remember template compilation headaches in early C++?), and unleashes people's creativity in the most Rube Goldberg-esque possible way. It's extremely fun, there's neither harm nor shame in playing with it alone by yourself, but in most public circumstances it is inappropriate!