Respostas:
l() permite o HTML também, você só precisa passá-lo como uma das opções:
$link = l($image_html, $path, array('html' => TRUE));
Isso interromperá a passagem do primeiro parâmetro check_plain(), para que o HTML completo que você passar seja envolvido na <a>tag.
Eu recomendaria usar esse método se a alternativa é escrever o link manualmente, você obtém o benefício da tradução automática de alias e é menos propenso a pequenos erros no HTML (dos quais eu sempre carrego).