As I am aware, not may people know how to use metatables. This is going to focus on setmetatable() and methods as functions, using the metatable.
First, you will need a table that you wish to use the meta table with:

local tab = {}

Then, you will need to make function to create the table:

function tab.newMeta(name)
    local self = setmetatable({}, {__index = tab})
    self.name = name
    --ect
    return self
end

In that function we create the table, and return it.
Then to use the function:

local variable
function start() --say you want to call this each time the player dies
    variable = tab.newMeta("I'm a table!")
end
start()

Now we have the table, we can make methods for it! (make sure to put the methods before you create the table)
Here's an example of a method we could create now:

function tab:updateMetaTableName(newname)
    self.name = newname
end
variable:updateMetaTableName("I have a new name!")

Notice how we now use "self". This is because the method knows that "self" is the table you want to update.
You can print out the name now:

print(variable.name)

Here's our whole script:
0_1520094478661_upload-ac7a531a-9951-42c4-a294-ce271f1f1c1b

More info on Metatables : http://wiki.roblox.com/index.php?title=Metatable

Sorry if this is badly worded, This is my first tutorial!