Paul Casey, who held the lead on his own throughout the tournament, struggled with a 1-over 72 to finish one shot short. Casey was joined by Padraig Harrington, Nick O'Hern and Marten Olander in a tie for second at 13-under-par 271.
Gonzalez was well off the pace to start the final round under damp and dreary conditions at Club de Campo. Heavy overnight rain forced the players to tee off in split tees and despite a bogey at the second, Gonzalez was able to begin his comeback with a birdie at the fourth.
'After three-putting the second I thought the tournament was over,' said Gonzalez, who earned a spot in next week's Volvo Masters Andalucia. 'I was seven behind and the will had left me. I didn't have any motivation, but then I started to play well, the door was opened and the light switched on for me.'
The Argentinean then birdied the fifth and ran home a 40-footer for a birdie at the par-4 sixth. Gonzalez added a birdie at the seventh to make it four in a row and climb to 11-under.
At the par-3 11th, Gonzalez dropped his tee shot inside eight feet and drained the putt for another birdie. He then dropped his approach from the rough to seven feet for a birdie at the 13th to grab a share of the lead alongside Harrington, who had taken outright first moments earlier thanks to a tap-in birdie at the 14th.
As on the front nine, Gonzalez used the birdie to get another run going. He played his third to five feet for a birdie at the 14th and added a birdie at the 15th to pull two clear of the field.
Gonzalez made things interesting after he bogeyed the 18th but none of his challangers, Casey included, could match him.
'That was the best round I have played this year,' said Gonzalez who won for the first time since the 2001 European Masters.
Casey carried a comfortable lead into the final round. The young Englishman stood four shots clear of the field and looked to be well on his way to becoming the first three-time winner on the European Tour this year with a two-putt birdie at the par-5 fourth.
The problems started for Casey with a bogey at the seventh and he missed the green behind a tree with his tee shot to the par-3 ninth.
The 26-year-old bogeyed the hole and dropped another shot with a bogey at the 11th. He salvaged what he could with a birdie at the 14th but in the end was unable to overcome his own mistakes.
Sergio Garcia made a run at the title and reached 13-under with a birdie at the 15th. The Spaniard bogeyed each of his last two holes, however, for a round of 67.
Garcia tied for sixth with Matthew Blackey, Peter Fowler and Paul Lawrie at 11-under-par 273.
Adam Scott was one shot further back at 10-under-par 274 along with Pierre Fulke and amateur Gonzalo Fernandez-Castano.