Faits:
A. En 1997, les époux X._ ont pris à bail un appartement de sept pièces sis dans un immeuble à Genève, ainsi qu'une place de parc dans un garage souterrain attenant. Le 4 octobre 2002, Y._ a été inscrit au registre foncier comme nouveau propriétaire de l'immeuble. Le 17 octobre 2002, il a résilié les baux pour le 31 août 2003.
Les locataires ont contesté la validité de la résiliation. Le Tribunal des baux et loyers du canton de Genève a déclaré les congés valables et accordé aux locataires une première prolongation des baux jusqu'au 31 août 2005. Sur appel des deux parties, la Chambre d'appel en matière de baux et loyers du canton de Genève a confirmé la validité des congés et octroyé aux locataires une prolongation unique des baux jusqu'au 31 décembre 2004. Par arrêt du 9 mars 2005, le Tribunal fédéral a rejeté dans la mesure de sa recevabilité le recours en réforme interjeté par les locataires (cause 4C.425/2004).
B. Comme les locataires n'avaient pas libéré les locaux, le bailleur a demandé leur évacuation par requête du 17 mai 2005, déposée devant la Commission genevoise de conciliation en matière de baux et loyers. La conciliation a échoué et le bailleur a introduit une demande en évacuation auprès du Tribunal des baux et loyers. Devant cette autorité, les locataires ont invoqué le statut diplomatique de dame X._, haut fonctionnaire de l'Organisation mondiale de la santé (OMS).
Dans son jugement du 28 mars 2006, le Tribunal des baux et loyers a admis que les locataires étaient, en principe, au bénéfice d'une immunité de juridiction civile. Il a relevé toutefois que l'immunité de dame X._ avait été levée par décision du 22 décembre 2005 prise par le Directeur général de l'OMS. Le tribunal a jugé que cette circonstance, intervenue en cours d'instance, permettait de reconnaître la recevabilité de la requête en évacuation. Comme ils ne disposaient plus d'aucun titre juridique les autorisant à rester dans les locaux, les époux X._ ont été condamnés à évacuer l'appartement immédiatement.
Sur appel des locataires, la Chambre d'appel a annulé le jugement de première instance et débouté le bailleur de ses conclusions, au motif que le tribunal n'était pas compétent au moment où les locataires ont été assignés, ceux-ci bénéficiant alors encore de l'immunité de juridiction.
Le bailleur a recouru au Tribunal fédéral. Par arrêt du 22 juin 2007 (cause 4A_107/2007), la cour de céans a jugé déterminant le fait que, au moment où les premiers juges avaient statué, le pouvoir de juridiction sur les locataires était réalisé. En conséquence, l'arrêt de la Chambre d'appel a été annulé et la cause a été renvoyée à la cour cantonale pour qu'elle se prononce sur la demande d'évacuation (<ref-ruling>).
La Chambre d'appel a tenu son audience de reprise le 8 octobre 2007. A cette occasion, les époux X._ ont sollicité de pouvoir s'exprimer par écrit. Dans leurs conclusions écrites du 24 octobre 2007, ils demandaient, principalement, le renvoi de la cause au Tribunal des baux et loyers pour instruction au fond et, subsidiairement, la fixation d'un délai pour se déterminer sur le fond; plus subsidiairement, ils concluaient à ce que le bailleur soit débouté de toutes ses conclusions au fond. Seule la conclusion principale était motivée; les anciens locataires soutenaient qu'à défaut d'un renvoi en première instance, il leur serait imposé une justice à deux échelons au lieu de trois. Ils ne se sont pas déterminés sur le fond de la cause, soit sur l'évacuation elle-même.
Pour sa part, Y._ a conclu, par mémoire du 31 octobre 2007, à ce que les époux X._ soient condamnés à évacuer immédiatement l'appartement et la place de parc.
La cause a été plaidée le 5 novembre 2007; elle a été gardée à juger à l'issue de l'audience. Par arrêt du 4 février 2008, la Chambre d'appel a confirmé le jugement rendu le 28 mars 2006 par le Tribunal des baux et loyers, qui ordonnait l'évacuation immédiate des locaux. La Chambre d'appel a motivé le rejet des conclusions principale et subsidiaires par le fait que les locataires avaient renoncé à se prononcer sur l'évacuation elle-même devant le Tribunal des baux et loyers, qui les avait pourtant invités à le faire par ordonnance du 20 septembre 2005, puis devant la Chambre d'appel, alors qu'ils avaient eu par deux fois la possibilité de prendre position sur le fond, soit dans leur acte d'appel et dans leurs conclusions écrites après le renvoi de la cause à l'autorité cantonale.
C. Les époux X._ interjettent un recours en matière civile. Ils concluent à l'annulation de l'arrêt du 4 février 2008, puis, principalement, au renvoi de la cause à la Chambre d'appel et, subsidiairement, à ce que Y._ soit débouté de ses conclusions en évacuation.
Y._ propose le rejet du recours et la confirmation de l'arrêt attaqué.

Considérant en droit:
1. 1.1 Le litige porte sur l'expulsion des recourants, qui n'ont pas quitté les objets loués nonobstant la fin du bail le 31 décembre 2004, confirmée en dernière instance par le Tribunal fédéral. Le recours en matière civile contre une décision finale rendue dans ce domaine est ouvert si la valeur litigieuse minimale de 15'000 fr. est atteinte (<ref-law>). Cette valeur est déterminée par le montant encore litigieux devant la dernière instance cantonale; si les conclusions ne tendent pas au paiement d'une somme d'argent déterminée, le Tribunal fédéral fixe la valeur litigieuse selon son appréciation (<ref-law>). Dans l'arrêt du 22 juin 2007 rendu dans cette même cause, le Tribunal fédéral a constaté que la présence des locataires dans l'appartement contrariait le projet de vente du bailleur et que la valeur litigieuse correspondait dès lors à l'intérêt économique du bailleur à la disparition du dommage que la mise en oeuvre retardée de son projet de vente lui faisait subir. Il a estimé que cet enjeu dépassait manifestement le montant de 15'000 fr. Le recours est dès lors recevable ratione valoris.
1.2 Saisi d'un recours en matière civile, le Tribunal fédéral statue sur la base des faits établis par l'autorité précédente (<ref-law>), à moins que le recourant ne démontre, de manière claire et circonstanciée, qu'ils ont été établis de façon manifestement inexacte - notion qui correspond à celle d'arbitraire - ou en violation du droit au sens de l'<ref-law> (<ref-law>; <ref-ruling> consid. 2.3).
2. A titre liminaire, il convient de souligner que, une fois levée, l'immunité de juridiction n'existait plus. Les recourants ne l'ignoraient pas; par courrier du 30 janvier 2006 adressé au Tribunal des baux et loyers, ils ont d'ailleurs fait valoir que la levée d'immunité ne rétroagissait pas au jour du dépôt de la demande en évacuation. Il s'ensuit qu'après la levée de l'immunité le 22 décembre 2005, les recourants ne pouvaient plus s'en prévaloir, notamment pour refuser de se déterminer sur le fond de la cause. Certes, ils pouvaient toujours soutenir que la demande en évacuation n'avait pas été introduite valablement au motif qu'ils bénéficiaient de l'immunité au moment de son dépôt; il s'agit là toutefois d'une autre question.
3. Invoquant l'art. 29 al. 2 Cst., les recourants se plaignent tout d'abord d'une violation de leur droit d'être entendus, au motif qu'ils ne se sont jamais prononcés sur le fond de l'affaire, soit sur l'évacuation elle-même, et qu'ils n'ont jamais eu l'occasion de le faire après que la question de l'immunité avait été définitivement tranchée.
3.1 Le droit d'être entendu, tel qu'il est garanti à l'art. 29 al. 2 Cst., comprend notamment le droit pour l'intéressé de s'exprimer sur les éléments pertinents avant qu'une décision ne soit prise touchant sa situation juridique, de produire des preuves pertinentes, d'obtenir qu'il soit donné suite à ses offres de preuve pertinentes, de participer à l'administration des preuves essentielles ou à tout le moins de s'exprimer sur son résultat, lorsque cela est de nature à influer sur la décision à rendre (<ref-ruling> consid. 2.2).
3.2 Dans son jugement du 28 mars 2006, le Tribunal des baux et loyers a non seulement admis la recevabilité de la demande d'évacuation, mais s'est prononcé sur le fond en ordonnant l'évacuation. Dans leur appel, les recourants, bien qu'ils ne bénéficiassent alors plus de l'immunité de juridiction civile, se sont limités à des critiques contre la recevabilité de la demande et ne se sont pas déterminés sur le fond. A la suite de l'annulation de l'arrêt cantonal par le Tribunal fédéral le 22 juin 2007 et du renvoi de l'affaire à l'autorité précédente pour qu'elle se prononce sur la demande d'évacuation, la Chambre d'appel a repris la procédure. Les anciens locataires ont déposé un mémoire de conclusions et la cause a été ensuite plaidée; à ces occasions, ils n'ont pas non plus pris position sur le fond de l'affaire.
Il s'ensuit que les recourants ont eu toute possibilité de se déterminer sur le fond dans leur mémoire d'appel, puis dans le cadre de la procédure qui a suivi le renvoi de la cause à la Chambre d'appel; une telle détermination n'aurait au demeurant pas exigé de longs développements, dès lors que la fin du bail au 31 décembre 2004, confirmée par l'arrêt du Tribunal fédéral du 9 mars 2005, était acquise. Comme déjà relevé, les recourants ne pouvaient plus, à ce stade de la procédure, arguer de l'immunité pour justifier leur défaut de détermination au fond. Ils pouvaient et devaient se déterminer dans le mémoire d'appel dès lors que le Tribunal des baux et loyers s'était prononcé sur le fond. A défaut, ils pouvaient et devaient prendre position dans le cadre de la procédure reprise devant la Chambre d'appel ensuite du renvoi de la cause; il est à relever à cet égard que le Tribunal fédéral a renvoyé la cause à la Chambre d'appel afin, précisément, qu'elle se prononce sur la demande d'évacuation. Comme la cour cantonale le fait observer à raison, l'omission des anciens locataires est inexplicable, sauf évidemment à y voir, à l'instar de l'intimé, un pur procédé dilatoire. En conclusion, le grief tiré de la violation du droit d'être entendu est mal fondé.
4. 4.1 Les recourants se plaignent également de la violation d'un principe découlant du droit fédéral et reconnu par la jurisprudence. Selon ce principe, la question de l'existence d'une immunité de juridiction de la partie défenderesse doit être examinée d'entrée de cause, de sorte que cette partie ne saurait être contrainte de procéder sur le fond tant que la question de l'immunité n'a pas été tranchée à titre préjudiciel (<ref-ruling> consid. 2.1 p. 140; <ref-ruling> consid. 3b p. 387). En l'espèce, les recourants font valoir qu'il s'étaient plaints, dans leur appel, du fait que le Tribunal des baux et loyers avait instruit parallèlement l'incident et le fond. Ce grief n'avait pas été examiné par la cour cantonale, qui avait admis l'appel pour un autre motif. Lorsque le Tribunal fédéral lui a renvoyé l'affaire, la Chambre d'appel aurait dès lors dû annuler le jugement de première instance et renvoyer la cause au Tribunal des baux et loyers afin que les anciens locataires puissent se prononcer sur le fond.
4.2 A cet égard, il convient de relever que le Directeur général de l'OMS a levé l'immunité de la recourante en date du 22 décembre 2005. Dès ce moment-là, les tribunaux pouvaient instruire et trancher les questions de fond. Partant, rien n'interdisait au Tribunal des baux et loyers de statuer le 28 mars 2006 sur l'évacuation, ni à la Chambre d'appel d'en faire de même dans l'arrêt attaqué du 4 février 2008. Là aussi, le moyen est dépourvu de tout fondement.
5. Sur le vu de ce qui précède, le recours sera rejeté.
Les recourants prendront à leur charge les frais judiciaires (<ref-law>) et verseront des dépens à l'intimé (art. 68 al. 1 et 2 LTF).

Par ces motifs, le Tribunal fédéral prononce:
1. Le recours est rejeté.
2. Les frais judiciaires, arrêtés à 5'000 fr., sont mis solidairement à la charge des recourants.
3. Les recourants, débiteurs solidaires, verseront à l'intimé une indemnité de 6'000 fr. à titre de dépens.
4. Le présent arrêt est communiqué aux mandataires des parties et à la Chambre d'appel en matière de baux et loyers du canton de Genève.
Lausanne, le 16 mai 2008
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
Le Président: La Greffière:
Corboz Godat Zimmermann