The home side twice took the lead from the spot through Vladimir Weiss and Gaetano D'Agostino, with Alessandro Diamanti initially equalising with a penalty for the visitors.
And Diamanti then set up a second equaliser for Alberto Gilardino before Panagiotis Kone scored what proved to be the winner midway through the second half.
The win lifted Bologna up to 14th, five points clear of the drop zone into which Pescara slipped due to Genoa's 3-2 win over Lazio.
Weiss had the first chance of the game with a shot from the edge of the area which just flew wide, while Bologna were also happy to try their luck from distance as Saphir Sliti Taider and Diamanti brought good saves from Mattia Perin.
The first penalty arrived on 29 minutes when Nicolo Cherubin fouled Weiss, who stepped up to convert the spot-kick.
But Pescara's lead lasted just five minutes as Damiano Zanon fouled Kone in the area and Diamanti equalised from the spot.
The home fans had to wait a full 10 minutes for the next penalty to be awarded, this time Frederik Sorensen bringing down Weiss, who allowed D'Agostino to restore Pescara's lead.
Bologna took just five minutes of the second period to get back on level terms with Gilardino heading in Diamanti's free-kick, and they could have been ahead before the hour only for Gilardino's effort to be ruled out for offside.
Pescara failed to heed the warning and duly went behind on 66 minutes as Archimede Morleo produced an excellent cross from the left to the far post, where Kone volleyed home from close range.