Gaby's answer worked well for me (and I would have upvoted it if I could), but my use case required a loop, and the one issue with $.filter is that it goes over all the elements in every loop pass. So I used slice instead, which allows you to select elements out of a set. It also makes the code slightly simpler. As an added bonus, I moved the selector out of the function, as I assume the list itself does not change and therefore there's no need to select it again and again.
This is my version, based on Gaby's:
var triplet = 0;
var $elements = $('.events_list li');
$('button').click(function(){
$elements
.hide() // hide the ones that are visible
.slice( triplet*3, (triplet+1)*3)
.show(); // and show them
triplet++;
});
Demo at http://jsfiddle.net/sf3N9/