Gio Reyna scored on the day he became the youngest player to make 50 Bundesliga appearances and Erling Haaland got an incredible late winner as Borussia Dortmund edged Hoffenheim 3-2 after late drama at Signal Iduna Park.