Danilo Petrucci sprang an "unbelievable" surprise to hold off rookie Alex Marquez and win the rain-hit French MotoGP at Le Mans on Sunday.