Faits:
A. A.a D._, d'origine étrangère, est arrivée en Suisse en 1998, au bénéfice d'une autorisation de séjour valable pendant cinq ans. Après trois années d'études de droit à l'Université de Y._, elle a obtenu une licence en droit reconnue en Suisse. Après ses études, elle a adressé une demande d'indemnités de chômage à la Caisse de chômage de l'Association des commis de Y._. Celle-ci lui a versé des indemnités journalières du 11 mars 2003 au 29 février 2004, notamment pendant une période d'emploi temporaire subventionné au Bureau des services d'appui aux projets de X._.
Lors d'un contrôle effectué en mars 2004, le Secrétariat d'Etat à l'économie (Seco) a mis en évidence que la prénommée ne remplissait pas les conditions relatives à la période de cotisations lorsqu'elle s'était annoncée à l'assurance-chômage. Par décision du 24 juin 2004 et décision sur opposition du 14 septembre 2004, la Caisse de chômage de l'Association des commis de Y._ a exigé de D._ la restitution d'un montant 23'542 fr. 75 correspondant aux prestations versées du 11 mars 2003 au 29 février 2004.
D._ a déféré la cause au Tribunal des assurances sociales du canton de Genève, en invoquant le droit à la protection de la bonne foi. Elle a notamment allégué avoir effectué diverses dépenses auxquelles elle aurait renoncé si la caisse lui avait d'emblée refusé les prestations litigieuses; en outre, le paiement de ces prestations avait entraîné une augmentation de sa charge fiscale et de son loyer (pour un logement subventionné); enfin, elle avait accepté un emploi temporaire subventionné au service de X._, dans le cadre de mesures relatives aux marché du travail, ce qui méritait rémunération. Par jugement du 4 janvier 2005, le Tribunal des assurances sociales du canton de Genève a rejeté le recours.
En dernière instance, le Tribunal fédéral (à l'époque : Tribunal fédéral des assurances) a annulé ce jugement, ainsi que la décision sur opposition du 14 septembre 2004, et a renvoyé la cause à la Caisse de compensation des commis de Y._ (dont les activités ont été, entre-temps, reprises par la Caisse de compensation Unia; ci-après : la Caisse); il appartiendrait à cette dernière d'entrer en matière sur l'argumentation de D._ relative au droit à la protection de la bonne foi et de statuer à nouveau sur l'obligation de restituer les prestations (arrêt du 3 février 2006 dans la cause C 80/05).
A.b La Caisse a procédé à diverses mesures d'instruction et a invité D._ à se déterminer. Par décision sur opposition du 4 avril 2007, elle a maintenu ses prétentions en restitution d'un montant de 23'542 fr. 75. Elle a considéré, en substance, que deux conditions du droit à la protection de la bonne foi faisaient défaut, à savoir un renseignement erroné qui lui aurait été donné par l'autorité et un dommage en résultant pour l'intéressée.
B. Cette dernière a saisi le Tribunal des assurances sociales du canton de Genève d'un recours contre cette décision sur opposition. Par jugement du 7 novembre 2007, la juridiction cantonale a partiellement admis le recours et a réformé la décision sur opposition litigieuse en ce sens que la recourante était condamnée à restituer à la Caisse un montant de 21'882 fr. 75.
C. D._ interjette un recours en matière de droit public contre ce jugement. Elle en demande l'annulation, ainsi que de la décision sur opposition du 4 avril 2007 et conclut, sous suite de frais et dépens, à ce que soit constatée l'absence de créance de la Caisse en restitution des prestations versées. L'intimée conclut au rejet du recours, alors que le Secrétariat d'Etat à l'économie a renoncé à se déterminer.

Considérant en droit:
1. Le litige porte sur l'obligation de la recourante de restituer les indemnités journalières que lui a versées l'assurance-chômage entre le 11 mars 2003 et le 29 février 2004. La recourante ne conteste pas, à juste titre, le caractère indû des prestations qui lui ont été allouées. Mais elle oppose le droit à la protection de sa bonne foi aux prétentions de la caisse en restitution de ces prestations.
2. 2.1 Le jugement entrepris (consid. 5) expose les conditions auxquelles un administré peut déduire du droit constitutionnel à la protection de la bonne foi (art. 9 Cst.) celui de se voir concéder par l'administration un avantage en soi contraire à la loi. Il convient d'y renvoyer sur ce point.
2.2 Il n'est plus litigieux, en instance fédérale, qu'en allouant des prestations indues, la Caisse a induit l'assurée en erreur quant à son droit aux prestations; la Caisse est intervenue dans une situation concrète, dans les limites de sa compétence, sans que l'assurée ait eu de raison de se douter du fait qu'elle n'avait en réalité pas droit aux indemnités journalières qui lui étaient versées; enfin, aucun changement de législation de nature à influer sur le droit à la protection de la bonne foi n'entrait en considération l'espèce. Sur ces points également, il convient de renvoyer au jugement entrepris.
3. Compte tenu de ce qui précède, la seule question qui se pose encore est celle de savoir si, en raison de l'octroi des prestations dont la restitution est aujourd'hui exigée, la recourante a pris des dispositions qu'elle ne peut plus modifier sans subir de dommage. A cet égard, la recourante fait valoir, en premier lieu, diverses dépenses auxquelles elle a fait face au moyen de ces prestations.
3.1 Le seul fait d'avoir dépensé des prestations pécuniaires perçues de bonne foi ne constitue pas, en soi, un acte de disposition irrévocable dont pourrait se prévaloir un assuré en invoquant le droit constitutionnel à la protection de la bonne foi. Cela vaut en tout cas lorsqu'il s'agit de dépenses courantes que l'assuré aurait de toute façon dû prendre en charge. Tout au plus ce dernier peut-il, dans un tel cas de figure, demander une remise de l'obligation de restituer s'il se trouve dans une situation difficile (art. 25 al. 1, 2ère phrase, LPGA; cf. DTA 1999 n. 40 p. 235, consid. 3b, avec notamment la référence à LUZIUS MÜLLER, Die Rückerstattung rechtswidriger Leistungen als Grundsatz des öffentlichen Rechts, thèse, Bâle 1978, n. 135 p. 69). Il convient de laisser ouvert le point de savoir s'il en va différemment lorsque l'assuré a procédé à des dépenses particulières, qu'il n'aurait pas consenties en l'absence d'une information erronée de l'administration et pour lesquelles il n'a pas conservé de contre-prestation présentant une valeur durable (dans ce sens : MÜLLER, op. cit., n. 135 p. 69 et n. 156 sv. p. 78 ss; BEATRICE WEBER-DÜRLER, Vertrauenschutz im öffentlichen Recht, thèse, Bâle 1983, p. 103; le même auteur : Falsche Auskünfte von Behörden, ZBl 1/1991 p. 15; voir cependant : arrêt du Tribunal fédéral des assurances U 88/03 du 12 mai 2004 consid. 6.2.2). Quoi qu'il en soit, en effet, ces conditions ne sont pas réunies en l'espèce, comme cela ressort de ce qui suit.
3.1 Le seul fait d'avoir dépensé des prestations pécuniaires perçues de bonne foi ne constitue pas, en soi, un acte de disposition irrévocable dont pourrait se prévaloir un assuré en invoquant le droit constitutionnel à la protection de la bonne foi. Cela vaut en tout cas lorsqu'il s'agit de dépenses courantes que l'assuré aurait de toute façon dû prendre en charge. Tout au plus ce dernier peut-il, dans un tel cas de figure, demander une remise de l'obligation de restituer s'il se trouve dans une situation difficile (art. 25 al. 1, 2ère phrase, LPGA; cf. DTA 1999 n. 40 p. 235, consid. 3b, avec notamment la référence à LUZIUS MÜLLER, Die Rückerstattung rechtswidriger Leistungen als Grundsatz des öffentlichen Rechts, thèse, Bâle 1978, n. 135 p. 69). Il convient de laisser ouvert le point de savoir s'il en va différemment lorsque l'assuré a procédé à des dépenses particulières, qu'il n'aurait pas consenties en l'absence d'une information erronée de l'administration et pour lesquelles il n'a pas conservé de contre-prestation présentant une valeur durable (dans ce sens : MÜLLER, op. cit., n. 135 p. 69 et n. 156 sv. p. 78 ss; BEATRICE WEBER-DÜRLER, Vertrauenschutz im öffentlichen Recht, thèse, Bâle 1983, p. 103; le même auteur : Falsche Auskünfte von Behörden, ZBl 1/1991 p. 15; voir cependant : arrêt du Tribunal fédéral des assurances U 88/03 du 12 mai 2004 consid. 6.2.2). Quoi qu'il en soit, en effet, ces conditions ne sont pas réunies en l'espèce, comme cela ressort de ce qui suit.
3.2 3.2.1 Le point de savoir quelles dispositions un administré a prises en raison d'une information erronée que lui a donnée l'autorité est une question de fait qui ne peut être soumise qu'à des conditions restrictives à l'examen du Tribunal fédéral, dans un recours en matière de droit public. Le recours ne peut critiquer les constatations de fait que si les faits ont été établis de façon manifestement inexacte ou en violation du droit au sens de l'art. 95 LTF, et si la correction du vice est susceptible d'influer sur le sort de la cause (art. 97 al. 1 et 105 al. 1 et 2 LTF). Demeurent réservés les art. 97 al. 2 et 105 al. 3 LTF, qui ne sont toutefois pas applicables dans la présente procédure.
3.2.2 La recourante allègue avoir demandé sa naturalisation en Suisse, ce qui lui aurait coûté 602 fr.; elle soutient qu'elle aurait renoncé à demander la naturalisation pour épargner ce montant si elle avait su qu'elle n'avait pas droit à des prestations de l'assurance-chômage. Les premiers juges ont toutefois considéré qu'elle aurait effectué cette démarche même si elle n'avait pas été au bénéfice de prestations de l'assurance-chômage à l'époque, afin d'augmenter ses chances de retrouver un emploi. La recourante ne démontre pas en quoi cette constatation serait manifestement inexacte. En particulier, le seul fait qu'au moment de demander sa naturalisation, elle savait déjà qu'elle obtiendrait prochainement un permis d'établissement (permis C) ne suffit pas à démontrer une telle inexactitude. En effet, la nationalité suisse pouvait procurer à la recourante d'autres avantages qu'un simple permis d'établissement, y compris dans le cadre de ses recherches d'emploi à Y._. Sur ce point, le recours est mal fondé.
3.2.3 Les premiers juges ont constaté que la recourante avait acheté deux billets d'avion pour un vol à l'étranger, en 2003, et pour le vol retour, le 2 juin 2003, pour un prix total de 1'235 fr. Ils n'ont pas constaté l'existence ou l'absence d'un lien de causalité entre cette dépense et les prestations versées indûment à la recourante, se limitant à préciser qu'il ne s'agissait pas d'une dépense courante. Toutefois, d'après ses propres allégations en instances cantonale et fédérale, la recourante a souhaité faire ce voyage à l'étranger, «après des années d'études et de sacrifices pour [elle-même] et son époux». Si elle n'avait pas perçu d'indemnités de l'assurance-chômage à l'époque, elle aurait tout au plus différé ce voyage le temps de retrouver un emploi, comme elle l'a expressément allégué en instance cantonale. Ayant retrouvé un emploi en mars 2004, toujours d'après ses allégations, elle aurait ainsi différé le voyage d'une année environ. Les dépenses n'en auraient pas moins été consenties, le versement indû de prestations de chômage n'ayant contribué, éventuellement, qu'à en avancer la date. Cette circonstance n'entraîne aucun dommage pour la recourante.
Les autres dépenses alléguées par la recourante pendant ce voyage n'ont pas été tenues pour établies par la juridiction cantonale, sans qu'on puisse lui reprocher sur ce point une constatation manifestement inexacte des faits. Au demeurant, même si les dépenses alléguées avaient été constatées, le même raisonnement que celui exposé ci-dessus pour l'achat des billets d'avions devrait être opposé à la recourante.
4. En instance cantonale, la recourante a allégué avoir subi une augmentation de sa charge fiscale et de son loyer (subventionné) en raison des prestations de chômage dont l'intimée exige aujourd'hui la restitution. La juridiction cantonale a refusé de déduire les montants correspondants de la créance en restitution de la caisse, au titre du droit à la protection de la bonne foi, au motif que les administrations concernées s'étaient déclarées prêtes à reconsidérer leurs décisions. La recourante ne soulève aucun grief contre cet aspect du jugement entrepris, sur lequel il n'y a donc pas lieu de revenir.
5. 5.1 D._ soutient que son activité au service de X._ constitue une disposition qu'elle ne peut plus modifier. En exigeant la restitution des prestations que lui a versées l'assurance-chômage en contre-partie de cet emploi temporaire, l'intimée la prive du salaire auquel elle peut légitimement prétendre pour son travail. Dans ce contexte, elle souligne que son activité pour X._ remplissait toutes les caractéristiques d'un contrat de travail au sens des art. 319 ss CO et que la contre-partie financière qu'elle percevait pour son activité était pour elle déterminante dans son choix de travailler pour X._. La recourante invoque également, toujours en rapport avec son activité pour X._, une violation de l'art. 9 al. 1 de l'Ordonnance limitant le nombre des étrangers (OLE; aujourd'hui abrogée) par la juridiction cantonale.
5. 5.1 D._ soutient que son activité au service de X._ constitue une disposition qu'elle ne peut plus modifier. En exigeant la restitution des prestations que lui a versées l'assurance-chômage en contre-partie de cet emploi temporaire, l'intimée la prive du salaire auquel elle peut légitimement prétendre pour son travail. Dans ce contexte, elle souligne que son activité pour X._ remplissait toutes les caractéristiques d'un contrat de travail au sens des art. 319 ss CO et que la contre-partie financière qu'elle percevait pour son activité était pour elle déterminante dans son choix de travailler pour X._. La recourante invoque également, toujours en rapport avec son activité pour X._, une violation de l'art. 9 al. 1 de l'Ordonnance limitant le nombre des étrangers (OLE; aujourd'hui abrogée) par la juridiction cantonale.
5.2 5.2.1 Lors de l'entrée en vigueur de la LACI, le Chapitre 6 de cette loi portait sur les «prestations au titre de mesures destinées à prévenir et combattre le chômage (mesures préventives)» (RO 1982 p. 2184 ss). Parmi ces mesures, l'art. 72 aLACI prévoyait l'octroi de subventions à des institutions publiques ou privées sans but lucratif, pour encourager l'emploi temporaire de chômeurs au titre de programmes destinés à procurer du travail ou à permettre une réinsertion dans la vie active. La subvention couvrait 20 à 50 % des frais pouvant être pris en compte (art. 75 al. 3 aLACI). Ces frais comprenaient le salaire des chômeurs participant au programme d'occupation avec l'approbation de l'autorité cantonale ou sur son injonction (art. 97 al. 1 let. b aOACI; RO 1983 p. 1236). Les participants étaient en principe liés par un contrat de travail à l'institution subventionnée; ils percevaient un salaire pour leur activité, et non des indemnités journalières de l'assurance-chômage (DIETER FREIBURGHAUS, Präventivmassnahmen gegen die Arbeitslosigkeit in der Schweiz, Berne 1987, p. 54).
5.2.2 La deuxième révision partielle de la LACI (modification du 23 juin 1995 de la LACI; RO 1996 p. 273 ss) a instauré la distinction entre les indemnités journalières (pure indemnisation par des indemnités dites «passives») et les indemnités spécifiques versées aux chômeurs qui participaient à une mesure de marché du travail et fournissaient ainsi une contre-prestation (RUBIN, Assurance-chômage, 2ème éd., p. 593 sv.). L'art. 27 al. 2 aLACI prévoyait ainsi que l'assuré pouvait prétendre entre 150 et 520 indemnités journalières, selon sa situation personnelle (let. a), ainsi qu'à des indemnités journalières spécifiques, conformément à l'art. 59b aLACI, dans les limites du délai-cadre d'indemnisation (let. b). D'après l'art. 59b aLACI, l'assurance versait aux assurés qui avaient droit aux prestations des indemnités journalières spécifiques, pour les jours durant lesquels ils participaient à des mesures relatives au marché du travail sur injonction ou avec l'assentiment de l'autorité cantonale (al. 1). Les indemnités journalières spécifiques étaient indépendantes du nombre maximum d'indemnités prévu à l'art. 27 al. 2, let. a aLACI, le Conseil fédéral étant chargé de régler les détails (al. 2).
Les art. 27 al. 2 et 59b aLACI sont entrés en vigueur le 1er janvier 1997 (RO 1996 p. 294), de même que l'art. 81b al. 1 aOACI (modification du 6 novembre 1996 de l'OACI; RO 1996 p. 3078). D'après cette dernière disposition, les indemnités journalières spécifiques allouées aux participants à un programme d'emploi temporaire l'étaient sous la forme d'un salaire donnant lieu à la perception de cotisations sociales. Le salaire était en principe fonction de la qualification, de l'expérience professionnelle et du niveau de responsabilité dans le programme d'occupation (Message concernant le programme de stabilisation 1998, du 28 septembre 1998, FF 1999 p. 30). Bien que l'organisateur d'un programme d'emploi temporaire et le participant fussent en principe liés par un contrat de travail, le salaire net était versé directement par l'assurance-chômage et non par l'organisateur du programme. Il était considéré comme un gain intermédiaire et pouvait être complété par une indemnité compensatoire allouée en vertu de l'art. 24 al. 4, 2ème phrase, aLACI (cf. <ref-ruling> consid. 2b p. 361; NUSSBAUMER, Arbeitslosenversicherung, in : Schweizerisches Bundesverwaltungsrecht [SBVR], 1ère éd., n. 673 sv. p. 244).
5.2.3 L'entrée en vigueur de la loi fédérale du 19 mars 1999 et de l'ordonnance du 11 août 1999 sur le programme de stabilisation 1998 (RO 1999 p. 2374 ss et p. 2387 ss) a entraîné plusieurs modifications dans le domaine des mesures relatives au marché du travail, dès le 1er janvier 2000. D'après la nouvelle législation, notamment, les participants à un programme d'emploi temporaire se voyaient allouer directement une indemnité spécifique, qui n'était plus assimilée à un salaire (abrogation de l'art. 81b aOACI). L'indemnité ne donnait pas lieu à la perception de cotisations sociales et ne pouvait pas être complétée par une indemnité compensatoire au sens de l'art. 24 aLACI (dans sa teneur en vigueur du 1er janvier 2000 au 1er juillet 2003; RO 1999 p. 2383, RO 2003 p. 1733). Le montant de l'indemnité spécifique était calculé de la même manière que celui de l'indemnité journalière, en fonction du gain assuré. Toutefois, afin d'atténuer les conséquences de cette modification pour les personnes dont le gain assuré n'était que modeste, il était prévu que les participants à un programme d'emploi temporaire comprenant une part de formation inférieure à 40 % reçoivent une indemnité spécifique de 102 fr. par jour au minimum, pour un emploi temporaire à 100 %. En cas d'emploi temporaire à temps partiel, ce montant minimum était réduit d'autant. Les indemnités spécifiques n'étaient pas imputées sur le nombre maximum d'indemnités journalières (art. 59b al. 2 et 3 LACI, dans sa teneur en vigueur du 1er janvier 2000 au 1er juillet 2003; cf. arrêt du Tribunal fédéral des assurances C 210/02 du 12 décembre 2002, consid. 2).
5.2.4 La troisième révision de la LACI (modification du 22 mars 2002 de la LACI; RO 2003 p. 1728 ss) a supprimé la distinction entre les indemnités journalières et les indemnités spécifiques aux assurés participant à un programme d'emploi temporaire. D'après la nouvelle législation, l'assurance alloue des prestations financières au titre des mesures relatives au marché du travail en faveur des assurés et des personnes menacées de chômage. Aux termes de l'art. 64a al. 1 LACI, ces mesures peuvent notamment consister en mesures d'emplois temporaires qui entrent dans le cadre de programmes organisés par des institutions publiques ou privées à but non lucratif (a), de stages professionnels en entreprise ou dans une administration (b) et de semestres de motivation destinés aux assurés à la recherche d'une place de formation au terme de leur scolarité obligatoire (c). Les assurés perçoivent des indemnités journalières de l'assurance-chômage pour les jours durant lesquels, en vertu d'une décision de l'autorité compétente, ils participent à une telle mesure d'emploi temporaire (art. 59b al. 1 LACI). Le Conseil fédéral fixe une indemnité journalière minimale pour les assurés qui participent aux mesures d'emploi prévues à l'art. 64a, al. 1, let. a ou b, qui comportent une part de formation de 40 % au maximum. Si le degré d'occupation est inférieur à 100 %, l'indemnité journalière minimale est réduite proportionnellement (art. 59b al. 2 LACI). Non réduite, cette indemnité minimale est de 102 fr. (art. 81b OACI). Les indemnités versées pendant la durée d'une mesure relative au marché du travail sont imputées sur le nombre maximum d'indemnités journalières prévu par l'art. 27 LACI.
5.2.5 Compte tenu de l'évolution législative depuis l'entrée en vigueur de la LACI, et malgré certaines analogies avec les situations régies par les art. 319 ss CO, l'organisateur d'un programme d'emploi temporaire et le participant à un tel programme ne sont en principe plus liés par un contrat de travail, mais par un contrat sui generis; ce dernier présente certaines analogies avec le contrat de travail, mais n'ouvre pas droit au paiement d'un salaire par l'employeur (Rubin, op. cit., p. 627; Nussbaumer, Arbeitslosenversicherung, in : Schweizerisches Bundesverwaltungsrecht [SBVR], 2ème éd., n. 719 p. 2396). L'indemnité journalière versée à l'assuré pendant un emploi temporaire l'est à certaines conditions posées par la loi et a pour objet d'indemniser le chômeur pour la perte de gain qu'il subit. Elle dépend en principe du salaire assuré, et non des qualifications du chômeur, de son expérience professionnelle ou des responsabilités qui lui sont confiées.
Cela étant, la transition d'un système de salaire à un système d'indemnités spécifiques, puis à un système d'indemnités journalières, n'a pas fait disparaître toute forme de contre-prestation pour le travail fourni par l'assuré dans le cadre d'un programme d'emploi temporaire. Ce dernier a droit - uniquement si la part de formation de l'activité temporaire n'est pas supérieure à 40 % - à une indemnité journalière minimale, quel que soit le gain assuré. La limite inférieure de l'indemnité est fonction du taux d'occupation de l'assuré dans le programme d'emploi temporaire, de sorte qu'elle dépend étroitement du temps que l'assuré a consacré à son travail. Dans cette mesure, l'indemnité journalière a également pour fonction d'assurer une contre-prestation aux chômeurs qui participent à une mesure d'emploi temporaire. Il en résulte qu'elle revêt un caractère mixte, comprenant d'une part un aspect indemnitaire - le montant maximum de l'indemnité journalière est fonction du gain assuré - et constituant, d'autre part, une forme de rémunération pour un travail fourni.
5.2.6 Il découle de ce qui précède que la recourante ne peut prétendre conserver la totalité des indemnités journalières qui lui ont été versées pendant son activité au service de X._, ni en se fondant sur un contrat de travail, éventuellement en relation avec l'art. 9 al. 1 OLE, ni en se prévalant du droit à la protection de la bonne foi. Dans la mesure où les indemnités qu'elle a perçues correspondent à un montant supérieur au minimum prévu par les art. 59b al. 2 LACI et 81b OACI, ces prestations avaient pour objet de couvrir une perte de gain découlant du chômage et ne représentent pas la contre-partie du travail fourni au sein de X._.
En revanche, pour ce qui concerne la part de ces prestations correspondant à l'indemnité minimale, la recourante n'est pas tenue à restitution. A défaut, elle devrait restituer la contre-prestation du travail fourni dans le cadre du programme d'emploi temporaire auquel elle s'est soumise, sans pouvoir revenir sur cette activité ni obtenir une autre forme de compensation pour son travail. Il appartiendra par conséquent à l'intimée de déduire du montant exigé en restitution le montant correspondant à la prestation minimum au sens des art. 59b al. 2 LACI et 81b OACI. Ce montant s'ajoute à la déduction de 1'660 fr. déjà admise par la juridiction cantonale, qui n'est contestée par aucune des parties. La cause sera retournée à l'intimée pour qu'elle statue à nouveau après avoir procédé aux déductions requises.
6. La recourante demande l'octroi de dépens pour les procédures cantonale et fédérale.
6.1 L'art. 68 al. 2 LTF prévoit que la partie qui succombe est en principe tenue de rembourser à la partie qui a obtenu gain de cause, selon le tarif du Tribunal fédéral, tous les frais nécessaires causés par le litige. Par ailleurs, aux termes de l'art. 61 let. g LPGA, le recourant qui obtient gain de cause devant le tribunal cantonal des assurances a droit au remboursement de ses frais et dépens dans la mesure fixée par le tribunal; leur montant est déterminé sans égard à la valeur litigieuse d'après l'importance et la complexité du litige.
D'après la jurisprudence, si la partie qui obtient gain de cause n'est pas représentée en procédure par un avocat ou une autre personne qualifiée, elle n'a qu'exceptionnellement droit à des dépens. Il faut admettre l'existence d'une telle situation exceptionnelle lorsque les conditions suivantes sont remplies : affaire complexe portant sur un objet litigieux élevé et nécessitant beaucoup de temps, dans une mesure dépassant ce qu'un particulier peut ordinairement et raisonnablement prendre sur lui pour la défense de ses intérêts; rapport proportionné entre le temps consacré et le résultat de la défense des intérêts en cause (<ref-ruling> consid. 7 p. 136; voir également <ref-ruling> consid. 4 p. 446; <ref-ruling> consid. 5 p. 21). Cette jurisprudence a été rendue à propos du droit aux dépens de la partie à une procédure de recours devant le Tribunal fédéral, mais il n'y a pas de motif de s'en écarter dans le contexte du droit aux dépens prévu par l'art. 61 let. g LPGA (cf. KIESER, ATSG-Kommentar, n. 96 ad art. 61 LPGA, p. 629).
6.2 En l'occurrence, la recourante a, certes, consulté un avocat pour la rédaction de ses écritures en instance cantonale, mais elle n'était pas représentée en procédure. Par ailleurs, les premiers juges ont estimé à juste titre que le temps qu'elle avait consacré à la défense de ses droits ne présentait pas un caractère extraordinaire, qui justifierait de lui allouer exceptionnellement des dépens malgré l'absence de représentation par un mandataire professionnel. Sur ce point, le jugement entrepris n'est pas critiquable. Pour les mêmes motifs, il convient de rejeter les conclusions de la recourante tendant à l'octroi de dépens pour la procédure fédérale.
7. Compte tenu de l'issue du litige, les frais de justice seront répartis par moitié entre la recourante et l'intimée (art. 66 al. 1 LTF).

Par ces motifs, le Tribunal fédéral prononce:
1. Le recours est partiellement admis, en ce sens que le jugement du Tribunal cantonal des assurances sociales du canton de Genève du 7 novembre 2007 et la décision sur opposition de l'Unia caisse de chômage du 4 avril 2007 sont annulés, la cause étant renvoyée à l'intimée pour qu'elle statue à nouveau sur la créance en restitution litigieuse, conformément aux considérants.
2. Les frais judiciaires, arrêtés à 1'000 fr., sont mis pour 500 fr. à la charge de la recourante et pour 500 fr. à la charge de l'intimée.
3. Le présent arrêt est communiqué aux parties, au Tribunal des assurances sociales du canton de Genève et au Secrétariat d'Etat à l'économie.
Lucerne, le 22 octobre 2008
Au nom de la Ire Cour de droit social
du Tribunal fédéral suisse
Le Président: Le Greffier:
Ursprung Métral