Faits : A. Par acte authentique du 19 mars 2008, instrumenté par la notaire C._, A._ a vendu aux époux A.B._ et B.B._ les parcelles contiguës xxx et yyy de la commune de Z._ (NE) ainsi que des parts de copropriété sur des voies d'accès. La parcelle xxx comprend une villa mitoyenne et une piscine; la parcelle yyy comporte un cabanon de jardin. Les conditions de vente prévoient notamment ce qui suit: "1. (...) Les restrictions de la propriété foncière de droit public (plans d'aménagement, plans d'alignement, restrictions de police des constructions, etc.) ainsi que certaines restrictions légales de la propriété (de droit civil) ne sont pas mentionnées au Registre foncier, ni la viabilité du terrain, et le vendeur n'assume aucune responsabilité de ce fait. 2. Garantie Le bien-fonds xxx (...) ainsi que le bien-fonds yyy précités sont vendus tels qu'examinés par les acquéreurs, sans garantie légale ni conventionnelle, pour les défauts matériels ou juridiques, apparents ou cachés, dont ils pourraient être affectés, que ces défauts soient connaissables ou non. Cette clause d'exclusion de garantie n'est pas applicable aux défauts frauduleusement cachés conformément à CO 199. Les parties déclarent avoir été spécialement rendues attentives à la portée de cette clause d'exclusion qu'elles reconnaissent expressément." Selon le plan d'aménagement du territoire, la totalité de la parcelle yyy et une partie de la parcelle xxx étaient à l'époque classées en zone d'utilité publique (ci-après: ZUP). Le registre foncier n'en faisait pas mention. A la suite du dépôt de l'acte authentique, le conservateur du registre foncier a toutefois informé la notaire de cette affectation et du fait que la commune disposait à ce titre d'un droit de préemption légal. Interpellée par la notaire, la commune a renoncé à faire valoir son droit. Les époux B._ et trois propriétaires de parcelles voisines ont demandé au Conseil communal de reclasser leurs biens-fonds en zone dite des abords de bourg (ci-après: ZAB). Le Conseil général de Z._ a accepté de modifier le plan d'aménagement en ce sens que la parcelle xxx est entièrement classée en ZAB; en revanche, la parcelle yyy a été maintenue en ZUP. Au 24 mars 2011, le déplacement de la limite de zone n'était pas entré en vigueur. B. Le 12 février 2009, A.B._ et B.B._ ont ouvert action contre A._ et C._. Ils concluaient à ce que les défendeurs soient condamnés, solidairement entre eux, à leur payer le montant de 164'244 fr. plus intérêts, soit 140'700 fr. pour la moins-value de la parcelle yyy, 15'210 fr. pour la contribution due à l'État pour le reclassement de la parcelle xxx en ZAB et 8'334 fr. pour des frais d'architecte, d'avocat et de mise aux poursuites du vendeur. En particulier, les acheteurs reprochaient à A._ de leur avoir frauduleusement dissimulé l'affectation en ZUP de la parcelle yyy et d'une partie de la parcelle xxx, ce qui rendait nulle l'exclusion de garantie contenue dans les conditions de vente. Une expertise judiciaire a été mise en oeuvre. L'architecte désigné a estimé qu'au jour de la vente, la valeur vénale des immeubles était de 718'000 fr.; elle aurait été de 843'000 fr. si la totalité des parcelles avait été située en ZAB. Par jugement du 7 mars 2013, le Tribunal régional du Littoral et du Val-de-Travers a rejeté l'action de A.B._ et B.B._. Les acheteurs ont interjeté appel, concluant désormais à ce que le vendeur et la notaire soient solidairement condamnés à leur verser 126'583 fr. plus intérêts, à savoir 108'244 fr. à titre de moins-value liée à l'inconstructibilité de la majeure partie des parcelles achetées, 10'005 fr. en remboursement de la contribution due à l'État à la suite du changement d'affectation de la parcelle xxx et 8'334 fr. pour des frais d'expertise privée, d'avocat et de mise aux poursuites du vendeur. Statuant le 18 novembre 2013, la Cour d'appel civile du Tribunal cantonal du canton de Neuchâtel a rejeté l'appel et confirmé le jugement de première instance. A.B._ et B.B._ ont recouru au Tribunal fédéral (cause 4A_619/2013). Par arrêt du 20 mai 2014, la cour de céans a déclaré irrecevable le recours constitutionnel subsidiaire, admis partiellement le recours en matière civile et annulé l'arrêt cantonal avant de rejeter la demande formée par les acheteurs contre la notaire et, pour le surplus, de renvoyer la cause à l'autorité précédente afin qu'elle rende une nouvelle décision. Par arrêt du 21 novembre 2014 après renvoi, la Cour d'appel civile neuchâteloise a admis partiellement l'appel et réformé le jugement de première instance en condamnant A._ à verser aux époux B._ le montant de 64'240 fr. avec intérêts à 5% l'an dès le 1 er avril 2008. C. A._ interjette un recours en matière civile, concluant au rejet de la demande de A.B._ et B.B._ "en tant que recevable". Les époux B._ proposent le rejet du recours dans la mesure où il est recevable. Pour sa part, la cour cantonale se réfère aux considérants de son arrêt.