The tournament went into a three man play-off with van Zyl, Horsey and Davies all finishing on total of 13 under par 274.
Englishman Horsey won in sudden death on the 18th hole with a short birdie putt after double-bogeying the hole in regulation play to surrender a one-shot lead.
In an extraordinary finish, van Zyl made it in through the backdoor as Horsey's double drop and Welshman Rhys Davies' bogey sent the tournament into extra holes.
It took three trips down the 18th to determine a winner, once in regulation play and two in a sudden death play-off.
Earlier, van Zyl who fired a final round 68, playing in the final group, trailed Horsey (69) by two and Davies (69) by one on the final green and would have thought his tournament over as his birdie attempt sailed narrowly wide.
The 32-year-old Sunshine tour winner went out in level par, but stormed into contention on the back nine with three birdies in a row from the 10th.
He added another on the par-five 15th hole.
Van Zyl, ranked 98th on the European tour money list known as the 'Race to Dubai' will vault up the ranking with his tie second finish.
His official world golf ranking will also improve substantially from 269th when the new rankings come out on Monday.
Leading final-round scores from the Hassan II Trophy in Agadir, Morocco on Sunday:
David Horsey wins play-off at the second extra hole
274 David Horsey (Britain) 67 71 67 69 274 Rhys Davies (Britain) 67 70 68 69
Jaco Van Zyl (South Africa) 68 73 65 68 276 George Coetzee (South Africa) 67 71 69 69 277 Jean-Baptiste Gonnet (France) 71 68 71 67
Oscar Floren (Sweden) 67 74 68 68 278 Richie Ramsay (Britain) 70 74 66 68
Mikko Ilonen (Finland) 74 64 69 71 279 David Lynn (Britain) 75 69 67 68
Tetsuji Hiratsuka (Japan) 71 68 70 70 280 Danny Willett (Britain) 72 71 69 68
Florian Fritsch (Germany) 70 69 70 71
Joost Luiten (Netherlands) 68 69 71 72
Lloyd Saltman (Britain) 67 72 69 72 281 Thomas Bjorn (Denmark) 72 73 74 62
Thorbjorn Olesen (Denmark) 70 72 71 68
David Dixon (Britain) 69 73 69 70
Mark Tullo (Chile) 68 72 69 72