Jefe Bergenstein
Legend
It's the way we've always done it.
In the future I'm going to suggest using a stat array but that won't make any difference mid campaign, also my players may veto it as they like the random generation.
This is part of your problem. His stat rolls give him the equivalent of +10 in magic items over everyone else. So you can up the monsters, but they're just going to slaughter the group if they challenge him.
I'd say retire the character, and let him use another player's rolls to stat his new one. If they're good enough for someone else, they can be good enough for him.
I tend to use stat arrays, but did try something new in my current game I will carry forward. Everyone, myself included, rolled a set of stats, 4d6, drop lowest, IN ORDER. So Str was the first roll, Dex, the second, etc. No swapping scores, no taking points off one to add to another. Once everyone had a random stat array, anyone could choose to use it, or, if nothing fit the character you wanted to play, you could use the standard array.
This added randomness, but kept it fair even after the dice fell, since the entire party could have had the exact same stats if they wanted. We almost did, since one array had an 18 in both Str and Cha that was hard to pass up, but my wife went with a rogue at the last minute. At that point, since no one's stats are much worse than anyone else's (aside from their own choice), you can balance encounters appropriately.