The Dutch had already qualified, winning nine qualifiers on the trot to secure top spot in Group E.
Toivonen, who plays for PSV Eindhoven in the Dutch championship, scored the decisive goal in the 53rd minute and Sweden held on after withstanding heavy pressure from the visitors.
The Dutch had crushed the Swedes 4-1 in their previous meeting in Amsterdam, and with Sweden missing captain Zlatan Ibrahimovic through suspension, Erik Hamren's team had a mountain to climb.
But in the AC Milan forward's absence, strikers Toivonen and Johan Elmander stepped up to the line and led Sweden to victory.
Elmander, who had a spell at Dutch clubs Feyenoord and NAC Breda earlier in his career, caused huge problems for the Dutch defence with his pace and power up front.
Early in the first half, he was fouled on the edge of the box, and Kim Kallstrom put Sweden ahead when he curled the resulting free-kick into the top corner after 14 minutes.
But with Robin Van Persie dropping deep to pick up the ball, the Dutch looked dangersous throughout and Klaas-Jan Huntelaar put them back on level terms shortly after.
Swedish fans must have feared the worst as Dirk Kuyt headed the Netherlands into the lead five minutes into the second half, but Sebastian Larsson levelled with a penalty two minutes later.
"That we got a quick equaliser was very important, it gave us great energy," Hamren told a news conference.
Sweden struck again a minute after Larsson's equaliser. Elmander once again broke into the box, collecting a throw in and dancing along the goal-line. His pull-back was only partially cleared, and Toivonen slotted home to put Sweden back in the driving seat.
The Dutch turned the screw in search of an equaliser but could not convert from a succession of corners, and at the final whistle the Rasunda Stadium erupted.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.