6-4, 6-7,7-6 blev Del Potros segersiffror i den stenhårda uppgörelsen.
Federer fick kämpa hårt för att hänga kvar i matchen i det andra setet och räddade en matchboll innan han vann med 10-8 i tiebreak.
I det avgörande setet hade Federer möjlighet att serva hem matchen vid 5-4-ledning, men missade tre matchbollar och istället kunde Del Potro vända och vinna i avgörande tiebreak.
Federer var obesegrad under 2018 och hade vunnit 17 raka matcher inför finalen, en svit Del Potro fick stopp på.