Faits: A. A.a La société anonyme vaudoise X._ SA, a engagé Y._ en qualité de contrôleur de gestion dès le 12 février 2007. De durée indéterminée, le contrat de travail comportait notamment les clauses suivantes: l'employé avait droit à un salaire annuel brut de 150'020 fr., plus un treizième salaire au prorata temporis du temps travaillé. L'horaire de travail était fixé en accord avec la direction générale, en fonction des besoins établis par cette dernière. L'horaire cadre était en principe de 9 h.00 à 12 h.00 et de 13 h.00 à 18 h.00. Le salaire alloué couvrait l'ensemble des prestations de l'employé, ainsi que ses déplacements professionnels en Suisse et à l'étranger; la compensation par un congé et la rétribution spéciale d'heures supplémentaires étaient en principe exclues, sous réserve d'accords particuliers. L'employé voyait son attention attirée sur les nombreux voyages professionnels qu'il serait amené à effectuer dans le cadre de son travail. L'employeuse détenait des sociétés domiciliées au Maroc. L'employé passait beaucoup de temps dans ce pays, où il travaillait sous les ordres de A._, directeur de deux sociétés du groupe. Dès le 1er mai 2007, l'employé a bénéficié de l'assistance d'un contrôleur de gestion junior. A.b Le 30 janvier 2008, l'employeuse a résilié le contrat de travail pour le 31 mars 2008. Dès le 25 février 2008, l'employé a fait intervenir son assurance de protection juridique, qui a formulé diverses réquisitions; par courrier du 20 mars 2008, elle a réclamé le paiement de 550 heures supplémentaires. L'employé a produit un décompte établi par ses soins; il n'en avait jusque-là jamais soumis à son employeuse. Ce décompte recense 787,5 heures supplémentaires pour la période s'étendant d'avril 2007 à janvier 2008. Il comprend en tout cas deux erreurs, en ce sens que l'employé prétend avoir travaillé les 20 juillet et 24 août 2007, alors qu'il était en congé ces jours-là. B. B.a Le 4 juillet 2008, l'employé a ouvert action contre l'employeuse devant le Tribunal civil de l'arrondissement de La Côte. Selon ses dernières conclusions, il demandait le montant total de 63'358 fr. 90, dont 52'299 fr. 75 à titre d'heures supplémentaires et 11'059 fr. 15 pour un solde de vacances non prises. L'employeuse a conclu au rejet, et à titre reconventionnel, au paiement de 6'016 fr. 40. L'employé a reconnu devoir l'équivalent en francs suisses de 2'289 euros et a invoqué la compensation. Une expertise judiciaire a été mise en ?uvre. Il s'agissait essentiellement de calculer les montants dus au regard des heures supplémentaires alléguées. S'exprimant sur les 22 heures de travail que l'employé alléguait avoir effectuées le dimanche, l'expert a précisé qu'il avait procédé à des contrôles permettant de constater les dimanches travaillés, mais qu'il ne se prononçait pas sur la réalité des chiffres indiqués dans le décompte fourni par l'employé. Le tribunal a par ailleurs recueilli cinq témoignages. Par jugement du 30 mars 2011, il a condamné l'employeuse à payer 7'327 fr. 60 à titre de solde de vacances, après déduction de la somme de 3'731 fr. 55 dont l'employé s'était reconnu débiteur. Aucun montant n'a été alloué pour les heures supplémentaires alléguées. Le tribunal a concédé que l'instruction avait établi l'accomplissement d'un certain nombre d'heures supplémentaires; toutefois, l'employé n'avait pas apporté de preuves suffisantes pour justifier le montant revendiqué à ce titre. En outre, il avait annoncé tardivement ces heures à l'employeuse. B.b L'employé a déféré cette décision à la Cour d'appel civile du Tribunal cantonal. Il réitérait ses conclusions en paiement de 63'358 fr. 90, tandis que l'employeuse concluait au rejet de l'appel. Par arrêt du 19 juin 2012, le Tribunal cantonal a partiellement admis l'appel et réformé la décision attaquée; il a condamné l'employeuse à payer la somme de 50'942 fr. 30, dont 43'614 fr. 70 à titre d'heures supplémentaires, plus 7'327 fr. 60 en compensation de vacances non prises. C. L'employeuse saisit le Tribunal fédéral d'un recours en matière civile, dans lequel elle conclut principalement à l'annulation de l'arrêt, subsidiairement à sa réforme, en ce sens que l'appel est rejeté et l'employeuse condamnée à payer la somme de 7'327 fr. 60. L'employé conclut au rejet du recours. L'autorité précédente se réfère à son arrêt.