Reus scored with a first-half stoppage time penalty and added another with a superb solo effort while Haaland headed in two more goals after coming on as a substitute, as Dortmund ended the campaign on a high and will continue in the Europa League.
Ajax Amsterdam and Sporting advanced to the Round of 16 while Besiktas finished in last place after losing all six of their group games.
The hosts, who had lost 3-2 to Bayern Munich in the domestic league on Saturday, took the lead with their first chance as Jude Bellingham, commanding in his midfield role, fed Dutchman Donyell Malen who slotted the ball under goalkeeper Ersin Destanoglu on the half-hour mark.
England international Bellingham had earlier been fined 40 000 euros by the German Football Association (DFB) for critical comments about referee Felix Zwayer following their loss to Bayern.
Dortmund, with top striker Haaland starting on the bench, doubled their lead with a Reus penalty after Besiktas' Welinton was sent off for a foul on Mo Dahoud in the box.
The Dortmund captain then gave his team a three-goal cushion after rounding three players to wrongfoot Destanoglu with a clever shot before Haaland headed in their fourth in the 68th, five minutes after coming on.
The Norwegian wrapped up their win with another close-range header in the 81st.