You can get this from any AST representation of a C program. Just walk the tree and dump it as an S-expression. All you need now is a good C parser that will build an AST.
I understand you can bend GNU to do that. I don't know how.
There are tools that can export XML versions of the AST, which are trivially equivalent to S-expressions. Our DMS Software Reengineering Toolkit it one of these. It can even retain some of the preprocessor directives. Not a dump of C, but a dump of Java doing exactly the same thing can be found here.
What you will find a bit harder is to regenerate valid source text from the tree. If you can't do that, doing transformations on the tree seems pointless.
You wanted to do this to apply transformations to the C code. Yes, you can do with with tree operations in lisp relatively easily. But you have code those transformations in lisp. DMS provides the ability to carry out transformations, using the surface syntax of the language (e.g., transfomations written using C syntax for patterns). That makes them generally easier to write, because the surface syntax doesn't have to know the microscopic detail of the AST. (DMS also has built-in prettyprinting of the trees).