A package is a container for symbols (symbols are a basic type that references variables and functions (or both)). Where you are "inside" a package (in-package), you can access all symbols directly. Otherwise, you need to name them with the package prefix. This is how it serves as namespace. This quick demo might help: https://youtu.be/XFc513MJjos?t=249
I very seldom tried Racket. CL picked my interest, and no language feature in a Scheme was attractive enough to me. CL seemed the most capable of all Lisp dialects, it seemed the most robust (a long history of industrial success stories), when I searched for CL libraries I found a lot, less so with Racket, etc. And so, the more I committed to learning and building stuff in CL, the less likely I was to switch to another Lisp. (Clojure? It takes so much resources when starting up, especially compared to CL, and I can't even install a library in a running REPL. That's my excuse for my disgust and fear of Java). I compiled some things lispers say about Racket: https://gist.github.com/vindarel/c1ef5e043773921e3b11d8f4fe1... and it makes me want to stay in my comfy CL environment (built with sweat).
I myself was never annoyed with the lisp-1/2 thing… You like the fact that in lisp-1 we can call a function given as reference directly, without `funcall`? Well, we can do that in CL, it's a `setf` away. It turns out we don't and it's alright.