Em princípio, bastaria forçar a avaliação do meu-cond final mas, como a definição tem um parâmetro do tipo &rest, o que iria ser passado não eram as cláusulas restantes mas sim uma lista com as cláusulas restantes, o que seria incorrecto (o parâmetro cláusulas teria como valor uma lista com a lista das cláusulas restantes). O problema resume-se então a eliminar o parâmetro do tipo &rest, o que poderemos fazer recorrendo a uma função local.
(defmacro meu-cond (&rest clausulas) (labels ((expande (clausulas) (if (null clausulas) nil `(if ,(caar clausulas) (progn ,@(cdar clausulas)) ,(expande (cdr clausulas)))))) (expande clausulas)))