Faits: A. Par deux décisions du 31 janvier 2000, la Caisse de compensation de la société suisse des entrepreneurs (la caisse) a demandé conjointement à E._, en sa qualité de secrétaire de la société X._ SA, et à U._, en tant que directeur, de réparer le dommage de 23'631 fr. 35 qu'elle avait subi dans la faillite de la société. Cette somme correspondait aux cotisations paritaires dues pour les mois de décembre 1997, janvier et avril 1998. B. Les prénommés ayant formé opposition à ces décisions par lettres des 3 et 29 février 2000, la caisse a saisi la Commission cantonale genevoise de recours en matière d'AVS/AI (aujourd'hui : Tribunal cantonal des assurances sociales du canton de Genève), les 6 et 30 mars 2000, en concluant à ce que ceux-ci fussent condamnés à lui payer la somme précitée. Le 26 mai 2004, la juridiction cantonale a rejeté les demandes de la caisse; celle-ci a alors déféré le jugement cantonal au Tribunal fédéral des assurances. Par arrêt du 14 février 2006 (H 128/04), l'instance fédérale a annulé partiellement le jugement cantonal et reconnu que E._ avait la qualité d'organe de fait de la société X._ SA. Elle a renvoyé la cause au tribunal cantonal afin qu'il examine la question de la responsabilité de E._, au sens de l'art. 52 LAVS, dans le dommage causé à la caisse de compensation. Par jugement du 28 mars 2007, la juridiction cantonale a rejeté la demande. C. La caisse interjette un recours en matière de droit public contre ce jugement dont elle demande l'annulation, avec suite de dépens, en concluant principalement à ce que l'intimée soit condamnée à lui verser la somme de 23'631 fr. 35 avec intérêts, subsidiairement au renvoi de la cause au Tribunal cantonal. L'intimée conclut au rejet du recours, avec suite de frais et dépens. L'Office fédéral des assurances sociales a renoncé à se déterminer.