In that code, you can just use label, as your function closes over it:
var label = $('.js-a-label');
label.html('the message!');
setTimeout(hideMessage, 5000);
function hideMessage() {
label.html('');
}
In the general case where the function you're calling doesn't close over the information you want it to use, you have a couple of options:
Add a function that does:
var label = $('.js-a-label');
label.html('the message!');
setTimeout(function() { hideMessage(label); }, 5000);
Use Function#bind (ES5+)
var label = $('.js-a-label');
label.html('the message!');
setTimeout(hideMessage.bind(null, label), 5000);
Function#bind returns a new function that, when called, calls the original with a specific this value (we don't need that, so I just used null above) and any arguments you give bind.
Use $.proxy, which does much the same thing as Function#bind:
var label = $('.js-a-label');
label.html('the message!');
setTimeout($.proxy(hideMessage, null, label), 5000);