As a matter of fact, I had the exact same argument in a Julia thread (modulos don't work, polynomial accesses don't work).
It honked off a whole bunch of people who've never had to do any of these things for a living and therefore considered them edge cases.
Additionally, for LUA, being one-based while trying to claim it's the scripting language for C inter-operability is quite preposterous.
In the same ways that simple for loops "don't work" because we need to e.g. check if i < length - 1 to know if we're at the last element...
It's not. You're asking new learners to overcome a great deal of intuition when already attempting to learn a mind-bending thing like programming. I've taught C++ and Matlab side by side to freshmen in university. They learn C++ first and encounter all kinds of off-by-one errors the compiler doesn't help them catch. When they get to Matlab, the universal sentiment I've found is "wow, this makes so much more sense"
For new learners, 0 indexing seems like such a pointless frustration with an obvious solution. It can be a needless roadblock for people otherwise excited to learn.
Same goes for indexing, you could write some functions like idx2(x, y, width, height), idx3(x, y, z, width, height, depth) that would compute the 1d index for you instead of using y*width+x (or the equivalent form adjusted for 1-based indexing) like you normally would.