In Lisps like Common Lisp, code is data.
(In CL, code is represented as cons lists, which totally sucks, because you can't attach any metadata (such as line number information) to the code.)
One of the insights of the "Scheme community" is that code is more than data. They found this out by investigating hygiene.
In essence, code has some features that aren't easily captured by simply using s-expressions.
Namely, code has lexical structure. Code containing LET for example introduces new bindings, and if you simply render that as lists, you're losing important information.
If you want hygiene (hint: you want it), simply using s-expressions isn't enough. You need syntax objects.