Réponses:
l() permet également le HTML, il vous suffit de le passer comme l'une des options:
$link = l($image_html, $path, array('html' => TRUE));
Cela empêchera le premier paramètre de passer check_plain(), donc le code HTML complet que vous transmettez sera enveloppé dans la <a>balise.
Je conseillerais d'utiliser cette méthode si l'alternative est d'écrire le lien manuellement, vous bénéficiez de la traduction automatique d'alias et elle est moins sujette à de petites erreurs dans le HTML (dont je fais moi-même toujours des charges).