> Maybe I'm just missing something obvious but it doesn't seem like you can start with an empty list that you can repeatedly append to
You can, but appending some list L and an empty list, or an empty list and L yields L in either case; there's nothing to append. Subsequent appends will be more interesting, e.g.
CL-USER> (append '(x) (append '(y z) '()))
(X Y Z)
> The empty list is nil, and `(append nil foo)` seems to just yield `foo`, not `(list foo)`Right. Conceptually APPEND appends lists and not bare elements; try (append '() '(foo))