<BOUCLE_enfants(ENFANTS){id_lieu=1}>#NOM</BOUCLE_enfants> (si tu n'as pas besoin des #CHAMP de la table familles) doit pouvoir fonctionner en indiquant que cette table peut être jointe, soit via le pipeline interfaces tel que http://zone.spip.org/trac/spip-zone/browser/plugins/contacts_et_organisations/trunk/base/contacts.php#L33 ou via la déclaration de l'objet éditorial comme http://zone.spip.org/trac/spip-zone/browser/plugins/contacts_et_organisations/trunk/base/contacts.php#L97 et suivants.
Cependant, pour obtenir des #CHAMP d'une autre table dans ta boucle, soit la table est déclarée explicitement dans la boucle (dans les parenthèses), soit il faut déclarer une exception pour le champ un peu comme là http://zone.spip.org/trac/spip-zone/browser/core/plugins/mots/base/mots.php#L39.
Avec un critère on peut tricher (mais je dis bien tricher !) (ENFANTS){familles} également en ajoutant la table dans les jointures_explicites (c'est à dire faire croire que la table a été mises dans les parenthèses de la boucle) pour pouvoir obtenir les #CHAMP de l'autre table. Utilisé par exemple dans le critère {gis} ou celui là http://zone.spip.org/trac/spip-zone/browser/plugins/contacts_et_organisations/trunk/contacts_fonctions.php#L175 .
Mais ça fait ajouter un critère.