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'<ref-law>, 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.

Considérant en droit:
1. Le litige porte sur la responsabilité de l'intimée, au sens de l'<ref-law>, en sa qualité d'organe de fait de la société X._ SA, dans le dommage causé à la caisse recourante par la perte de cotisations paritaires afférentes aux mois de décembre 1997, janvier et avril 1998.
2. Les règles de droit applicables ont été exposées dans l'arrêt du 14 février 2006, singulièrement à son consid. 3, si bien qu'il suffit d'y renvoyer.
3. Dans le cadre de leur mandat d'instruire et de trancher la question de la responsabilité de l'intimée dans le dommage subi par la caisse de compensation, les premiers juges ont constaté que l'intimée prenait effectivement la responsabilité d'effectuer les paiements tant que les comptes étaient approvisionnés, mais que lorsque la société X._ SA était confrontée à des problèmes de liquidités, l'ex-époux de l'intimée choisissait les créanciers qui devaient être désintéressés.
Considérant que l'intimée n'avait plus la maîtrise ni de pouvoir sur les décisions prises par son ex-époux dans le choix de l'affectation des fonds et des débiteurs à désintéresser, le tribunal cantonal en a déduit que l'intimée n'avait pas commis de négligence grave de sorte que sa responsabilité, au sens de l'<ref-law>, n'était pas engagée.
4. La caisse recourante soutient que les juges cantonaux ont mal appliqué l'<ref-law>. A son avis, du moment que l'intimée s'occupait en particulier de la gestion administrative des charges sociales, qu'elle donnait les ordres de paiement y relatifs et qu'elle connaissait la situation financière de la société, elle a commis une faute en ne versant pas les cotisations dues.
5. Pour résoudre le litige, il s'agit de déterminer si l'intimée doit répondre d'actes ou d'omissions qui relevaient de son domaine d'activités. Comme cela a été rappelé dans l'arrêt du 14 février 2006 (consid. 3 in fine), la responsabilité d'un organe de fait dépend en particulier de l'étendue des droits et des obligations qui découlent des rapports internes, sinon pareil organe serait amené à réparer un dommage dont il ne pouvait empêcher la survenance, à défaut de disposer des pouvoirs nécessaires.
Les critiques que la recourante adresse à l'égard du jugement attaqué quant à l'étendue des prérogatives de l'intimée dans la gestion de la société faillie sont essentiellement de nature appellatoire et ne peuvent dès lors être examinées par le Tribunal fédéral. De toute manière, la recourante n'indique pas en quoi les constatations de fait auraient été établies de façon manifestement inexacte ou en violation du droit (<ref-law>).
En l'espèce, ainsi que l'ont retenu les premiers juges, l'intimée n'avait aucun pouvoir dans le choix des débiteurs à désintéresser lorsque les fonds disponibles étaient insuffisants, car les décisions étaient prises par son ex-époux. Pareille circonstance aurait certes pu fonder la responsabilité de l'intimée si elle avait eu la qualité d'organe légal ou statutaire de la société, compte tenu des attributions légales intransmissibles et inaliénables du conseil d'administration (<ref-law>), d'autant que la jurisprudence s'est toujours montrée sévère lorsqu'il s'est agi d'apprécier la responsabilité d'administrateurs qui alléguaient avoir été exclus de la gestion d'une société et qui s'étaient accommodés de ce fait sans autre forme de procès (par ex. consid. 6 de l'arrêt C. du 10 décembre 2007, H 224/06). Toutefois, non seulement l'intimée n'avait pas d'obligation légale de veiller au paiement des cotisations, mais elle ne pouvait de toute manière pas procéder au versement des cotisations en souffrance, puisque son ex-époux en décidait autrement. En d'autres termes, l'intimée était dans l'impossibilité objective d'exercer ses fonctions et ne saurait dès lors être amenée à réparer un dommage dont elle ne pouvait empêcher la survenance, faute de disposer des pouvoirs nécessaires pour l'empêcher. Le recours est infondé.
6. La recourante, qui succombe, supportera les frais judiciaires (<ref-law>). Pour le même motif, elle est redevable d'une indemnité de dépens à l'intimée (<ref-law>).

Par ces motifs, le Tribunal fédéral prononce:
1. Le recours est rejeté.
2. Les frais judiciaires, arrêtés à 3'000 fr., sont mis à la charge de la recourante.
3. La recourante versera à l'intimée la somme de 1'500 fr. (y compris la taxe à la valeur ajoutée) à titre de dépens pour l'instance fédérale.
4. Le présent arrêt est communiqué aux parties, au Tribunal cantonal des assurances sociales de la République et Canton de Genève et à l'Office fédéral des assurances sociales.
Lucerne, le 26 mai 2008
Au nom de la IIe Cour de droit social
du Tribunal fédéral suisse
Le Président: Le Greffier:
Meyer Berthoud