I originally wrote it to support 5.1+, but ran into a few issues and inconveniences that made me opt for 5.2+.
From the Lua C API side of things, the only real issue was that many of the methods in the MMIO submodule require the full unsigned 32-bit integer range to work (specifying a base physical address, offset, 32-bit values, etc.). lua_tointeger() in 5.1 loses that information when it converts to a signed 32-bit integer, so the equivalent of lua_tounsigned() would need to be backported to lua-periphery for the MMIO submodule to work correctly. luaL_len() would also have to be backported/replaced as Harley pointed out, but it's only used a handful of times in the library to get the length of a table.
From the Lua language side of things, 5.2 has two features that make it more conducive to working with bits in this context. One is the stock bit32 library, which is pretty much essential for working with the SPI, I2C, and MMIO interfaces. The other is supporting hexadecimal escape characters in strings, like "\xaa\xbb\xcc", which is not essential (e.g. you could use string.char() in 5.1 instead), but handy for the Serial interface if you're working with binary data strings.
So lua-periphery could be modified to work with 5.1, but probably won't be very useful in the native language without additional libraries (at least to supply the bitwise operations) and I was aiming to make it useful with Lua out of the box. I suspect 5.3 will be an even more natural fit for lua-periphery with the native bitwise operators. (It would also be more awesome if it had equivalent of Python's struct.pack() and struct.unpack() built-in.)
Thanks,
~vsergeev
Ivan Sergeev