Problem 1. In general, an S-expression is of a tree structure rather than a simple list. So when you write the recursive part, don't just
(cons (car l) (remove-all (cdr l)))
If l is a simple (linear) list, you still don't want to write the recursion like the above. Instead, you better write it in a tail recursion form.