Hosts Lazio, who drew 1-1 at Serie A leaders Juve in last week's semi-final first leg, seized the initiative eight minutes after the break when Uruguay midfielder Alvaro Gonzalez headed in Cristian Ledesma's cross.
Juve piled forward for an equaliser, which they found in stoppage time through Arturo Vidal, but soon after substitute Floccari headed in a corner when he rose above the Chilean to send the Stadio Olimpico into raptures.
"It was a nervous evening. I am happy to have given a decisive contribution to a result like this," Floccari told Rai television.
Let's enjoy tonight and we'll see who we play in the final," he added when asked a preference between AS Roma and Inter Milan.
Juve had come into the game under pressure after a wobble at the top of Serie A and widespread criticism following coach Antonio Conte's verbal attack on match officials at the weekend.
Conte, banned from the dugout for the next two league games for an outburst which pundits said was rich given Juve's 2006 demotion for procuring favourable referees, rotated his side but they still had the better of a fast and furious first half.
Lazio, who last won the trophy in 2009, then edged the second half despite the introduction of Juve's Andrea Pirlo as the Italian champions missed out again in the latter stages of the Cup having lost in the final to Napoli last year.
Roma are leading Inter 2-1 after their semi-final first leg last week but the return at the San Siro does not take place until April 17.
The long wait is due to the lack of clout the largely unloved Italian Cup has in fixture programming.
Roma, whose coach Zdenek Zeman was given a vote of confidence by club bosses on Tuesday after patchy form, decided with the league to play a Serie A match against Cagliari on Friday instead of the second leg this week.
The final takes place on May 26.