Removing side-effects from the equation allows expressions to be evaluated in any order (although not all functional languages use this). A function will always return the same result if passed the same input.
This determinism removes a whole class of bugs found in imperative programs. In fact, I would even go as far as to say that most bugs in large systems can be traced back to side-effects - if not directly caused by it, then caused by a flawed design made possible only by using side-effects. Functional programs will most often have less bugs!