It's true in one sense that bootstrapping a language with itself can lead to complications. On the other hand, the people writing a compiler for say C++ are likely to be the world's foremost experts at C++. To a degree, then, it's only natural that they'd choose that language in which to write their code.
It also gives the authors complete autonomy — they don't have to worry about Language X becoming unsupported, because when they're writing compilers for Language Y Version 2 in Language Y Version 1, they know that the compiler for Language Y Version 1 isn't going to disappear or cease to be supported: they are literally the people responsible for keeping it around and supporting it.
Besides, there aren't much better tests of whether a compiler is working properly than to pass its own source code through it. :)