I tend to describe tools like fsolve with a metaphor of a blind man set down on the surface of the earth, then tasked with finding the lowest point in elevation. All I allow him is a cane to see which direction is locally downhill (along with a full set of scuba gear.)
In the case of fsolve, you are effectively asking the person to actually find a point that lies at a SPECIFIC elevation for multiple equations, and to solve all of them at once.
What happens is the solver can sometimes get stuck in a local valley, but one that does not lead to a solution. Or, it may diverge to a bad place, always moving in a direction that looks like it may be good, but in reality, going noplace good.
In these degenerate cases, nothing magical can be done. You just needed to start in a better place. And since every problem will be different, there is no perfect set of starting values that will always get you to a solution.
Once approach that can help is to use multi-start techniques, where the solver is started multiple tmimes from random start points in the domain of interest. Even though one or more of them may fail, one hopes that at least one start point will be a good choice. This is still not a perfect solution of course, but if can highly improve your chances of a valid solution being found. Other approaches are to use tools like GA, simulated annealing, PSO, etc. These stochastic solvers can often survive a bad problem.
However no solver is perfect, ALL the time. One can always provide a problem that will blow any specific solver out of the water. The solution there is often to understand the various tools, to know how they can fail so you will recognize failure when you see it, and to know which solvers can work better on specific problems.