So took a look at swig and I don't really like all the special syntax required. Especially syntax that isn't in comments (so you can't compile it as a C++ binary if you wanted)
There is a special syntax, but it's not very complex, and I'm not sure I understand your second point. The swig directives are either ignored by the C preprocessor (using an #ifdef) or declared in another file altogether, which is how I've always done it
The last project I used it for was to interface with a proprietary OCR library using Ruby. I build a small C++ wrapper around my client's C library that defined the interface I wanted to call from Ruby. I used swig to generate the ruby bindings between my C++ wrapper library and the ruby library.
My point is that you should compile the wrapper library separately from the core library, and it should build without swig. There is no hard dependency on the core C/C++ code on SWIG if its done correctly.
I think it's easier than the alternative.