What it means, simply, is that you can not apply the GPL on top of code or libraries that are not compatible with the GPL and distribute a compiled combined work, unless you apply a linking exception.
The linking exception provides a way for you to distribute compiled executables containing the non-free bits, while no special permission is needed to distribute the program in source format.
This exception, of course, depends on the non-free libraries allowing you to distribute programs that are linked against it (especially statically).
So, to answer your first question, no .. this is not a 'chicken or egg' scenario. What I recommend is when confronted with the possibility of having to write an exception, its probably better to just choose a license with fewer restrictions, like the Apache or 3 clause BSD license.
Secondly, no, you can't just apply the GPL to your code for the purposes of changing the license for something that you happen to link against. Again, we come back to the linking exception, which is your responsibility to provide.
The spririt
of the GPL lives in a world where there is no such thing as proprietary software. RMS has stated this as the eventual goal on many occasions. What remains are practicalities that must be addressed for people who want to distribute free software on non-free platforms.
This is one of the biggest reasons that Linux (as in the Kernel) remains GPL v2 only.