Faits:
A. Par contrat du 17 août 1998, Y._, né le 25 avril 1947, a été engagé en qualité d'agent d'exploitation par une entreprise qui est devenue ultérieurement X._ SA. Par lettre du 13 janvier 2011, l'employeuse a résilié le contrat de travail pour le 30 avril 2011. L'employé était alors âgé de 64 ans et avait accompli un peu plus de douze années de service; il a fait opposition au congé.
B. B.a Le 29 septembre 2011, l'employé a actionné l'employeuse en paiement de 47'385 fr. à titre d'indemnité pour licenciement abusif. Par jugement du 30 mars 2012, le Tribunal civil du Littoral et du Val-de-Travers a retenu que le congé était abusif; il a condamné l'employeuse à verser une indemnité de 31'590 fr., correspondant à quatre mois de salaire.
B.b L'employeuse a déféré cette décision à la Cour d'appel civile du Tribunal cantonal neuchâtelois. Dite autorité a confirmé le jugement attaqué par arrêt du 21 août 2012. Son raisonnement peut se résumer comme il suit: l'employé manquait de motivation. Toutefois, ses évaluations pour les années 2008, 2009 et même 2010, à l'instar des années précédentes, retenaient une moyenne de 3, soit des résultats correspondant aux attentes de l'employeuse. Lorsqu'elle avait fixé les objectifs pour 2011 quelque deux mois avant le licenciement, l'employeuse avait précisé qu'il ne fallait pas décrocher, qu'elle avait toujours besoin de l'employé, si bien que l'intéressé ne pouvait objectivement pas en déduire un risque de licenciement. Les offres de l'employé étaient faites aussi bien et aussi vite que celles de son collègue; son rendement par rapport à un autre collègue était inférieur d'un cinquième environ, mais ce collègue était nettement plus jeune et particulièrement performant. Dans ces circonstances, le licenciement une année avant la retraite était abusif.
C. L'employeuse (ci-après: la recourante) interjette un recours en matière civile; invoquant uniquement une violation de l'<ref-law>, elle conclut au rejet de l'ensemble des conclusions en paiement prises par l'employé (ci-après: l'intimé). Ce dernier conclut au rejet du recours. L'autorité précédente se réfère à son arrêt.

Considérant en droit:
1. Le Tribunal fédéral conduit son raisonnement juridique sur la base des faits établis par l'autorité précédente (<ref-law>). A teneur de l'<ref-law>, il ne peut s'en écarter que si les faits ont été établis de façon manifestement inexacte - c'est-à-dire arbitraire (<ref-ruling> consid. 1.5) -, ou en violation du droit au sens de l'<ref-law>. La partie recourante qui entend s'écarter des constatations de l'autorité précédente doit expliquer de manière circonstanciée en quoi les conditions d'une exception prévue par l'<ref-law> seraient réalisées, faute de quoi il n'est pas possible de tenir compte d'un état de fait qui diverge de celui contenu dans la décision attaquée (<ref-ruling> consid. 1.2; <ref-ruling> consid. 1.4 et 6.2).
En l'espèce, à défaut de tout grief en ce sens, les faits ressortant de l'arrêt attaqué sont seuls déterminants. Dans la mesure où la recourante invoque d'autres faits, il ne saurait en être tenu compte.
2. Dans le cas concret, l'intimé, depuis plus de dix ans au service de la recourante, était à une année environ de l'âge de la retraite; bien que souffrant d'un manque de motivation, il continuait à fournir, comme par le passé, un travail correspondant aux attentes de la recourante, c'est-à-dire suffisant. Deux mois après avoir fait l'objet d'une évaluation plus ou moins satisfaisante, il a reçu son congé. L'arrêt attaqué ne constate pas que les prestations de l'intimé se seraient sensiblement dégradées entre les dates de la dernière évaluation et du congé, ni qu'il y aurait eu une mise en demeure préalable, ou que les personnes responsables au sein de la recourante auraient recherché une solution moins incisive avec l'intimé.
La situation de fait diffère sensiblement de celle de l'arrêt 4A_419/2007 invoqué par la recourante, où le travailleur n'était âgé que de 55 ans et avait reçu plusieurs admonestations de nature à lui faire prendre conscience du risque de licenciement s'il n'améliorait pas ses performances; il n'avait pas non plus été en mesure de fournir des prestations suffisantes à un autre poste de travail où il avait été muté. Les faits du cas d'espèce sont en revanche très similaires à ceux jugés dans l'arrêt publié aux <ref-ruling>, où le congé abusif a été retenu: il y allait d'un travailleur à 14 mois de la retraite légale qui, bien que lent, fournissait des prestations satisfaisantes et avait été licencié sans qu'on recherche une solution moins dure.
En suivant ce précédent très similaire, la Cour d'appel n'a pas violé le droit fédéral. On ne saurait en particulier parler, comme le fait la recourante, de "prime à la nonchalance". Il est dans le cours ordinaire de la vie qu'un travailleur se trouvant à une année de la retraite puisse être moins motivé qu'un jeune; cela ne dispense pas l'employeur d'avoir des égards envers une personne depuis longtemps à son service, tant que celle-ci accomplit ses tâches de manière objectivement satisfaisante.
3. La recourante succombe. Elle supporte les frais et dépens de la procédure (art. 66 et 68 LTF).

Par ces motifs, le Tribunal fédéral prononce:
1. Le recours est rejeté dans la mesure où il est recevable.
2. Les frais judiciaires, arrêtés à 2'000 fr., sont mis à la charge de la recourante.
3. La recourante versera à l'intimé une indemnité de 2'500 fr. à titre de dépens.
4. Le présent arrêt est communiqué aux mandataires des parties et à la Cour d'appel civile du Tribunal cantonal du canton de Neuchâtel.
Lausanne, le 18 février 2013
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente: Klett
La Greffière: Monti