What is a function?
To understand why this happens, we need to know what is a function. When evaluating the lisp form
(myfunc arg1 arg2 ...), emacs first checks what
myfunc is. If it is a function, emacs evaluates all lisp forms
arg2, etc. then calls the function
myfunc with the resulting lisp objects as arguments.
As was noted,
and is not a function, it is a special form, thus it can evaluate its arguments as needed. As I gave in a comment earlier, the form
(and nil (drop 'bomb)) is safe because
(drop 'bomb) is never evaluated.
On the other hand,
(apply #'and (list nil (drop 'bomb))) is not safe, because
apply is a function, so emacs first evaluates
#'and (the result is a symbol), then evaluates
(list nil (drop 'bomb)), which is again a function call, so you guess what happens next :
nil is evaluated, then
(drop 'bomb) is evaluated.
apply complain ?
Trying to use
apply on a special form (or a macro) doesn't make sense, because the special form can't possibly have its special behaviour, so it throws an error.