Think of it like putting a table with some extra data inside of the table.
table = {metatable = {}}
Except you can’t access metatables inside of this table by doing table.metatable. Instead you have to do getmetatable(table). On top of all that, metatables allow you to do some pretty neat things such as using a table to call a specific function table() and even more, than what you would be able to do with just a regular table. The reply above me has a pretty good topic on metatables however, and I’m not to explain every single thing you can do with metatables in a single reply (That would take ages!).