Bueno, yo creo que una buena regla general sería be: use apply cuando no puedes usar funcall: este último es más claro pero también es menos general que apply porque no te permite llamar a una función cuyo número de argumentos solo se conoce en tiempo de ejecución.
Por supuesto que no es más que una buena práctica y podría hacer sistemáticamente esto de la manera fea (utilizando sistemáticamente aplica), pero como te habrás dado cuenta, utilizando la forma feo cuando una manera muy similar pero más limpio está disponible se no muy común-lisp-y.
Ejemplo de la función que debe aplicarse en lugar de funcall: podrías aplicar un mapa de tal manera que (map #'+ '(1 2) '(2 3))
y (map #'+ '(1 2) '(2 3) '(3 4))
tanto el trabajo (que es el caso de la función estándar) sin necesidad de utilizar aplicar (o eval, que es trampa) ?
EDITAR: como también se ha señalado, sería tonto para escribir: (funcall func (first list) (second list) (third list) etc.)
en lugar de (apply func list)
.