So, is recursion widespread in real software that is used by a lot of people or is it avoided whenever possible?
Is it entirely dependent on the language used?
Recursion only blows up if your PL has fixed size stacks and no tail call elimination. There are plenty of languages which support both, and recursion is safe.
Particularly with growable stacks, the alternative to recursion is to use something that has equivalent runtime characteristics as a growable stack (even making one explicitly). That's still using recursion, it's just explicit.
It is also used extensively in parsers and compilers. There's also recursive data structures, which are also extremely common.
Why? It's sometimes the only elegant way to walk over small tree-like data structures, the depth of which you can be safely assured will never approach Python inbuilt limit (and if they did, it would always be a data error that should fail anyways).
I do wish Python had Perl-style tail-recursion though.
Almost never if it doesn't.
You need strong language support, otherwise you'll be in for a world of hurt.