Austria's Laura Feiersinger blasted her penalty over while Viktoria Pinther and Verena Aschauer were denied by Danish keeper Stina Petersen.
Austria missed four penalties on the night in total, as Sarah Puntigam had fired over from the spot in the 13th minute after Denmark midfielder Maja Kildemoes' handball.
“It was a very long match, it made me get older,” said Denmark coach Nils Nielsen.
“Austria played a beautiful tournament, but I'm delighted we ended up winners and I think it was deserved.”
In Sunday's final, Denmark will take on hosts the Netherlands, who beat England 3-0 in Enschede later on Thursday.
The Dutch have already beaten beat Denmark during the Euro tournament, having won 1-0 in the group stage.
Denmark, who sent eight-time champions Germany packing with a 2-1 quarter-final win, will play their first Euro final after their sixth semi-final in history.
— UEFA Women's EURO (@UEFAWomensEURO) August 3, 2017
Denmark dominated possession but Austria threatened first with Nina Burger's shot that was cleared off the goal line by the Danish defence.
Denmark's Sanne Troelsgaard blasted her shot into the crossbar on 21 minutes in her team's best first-half chance.
Austrian keeper Manuela Zinsberger found herself pretty busy after half-time, clearing Simone Boye's glancing header from close range and Pernille Harder's left-footer from inside the box.
Katrine Veje slammed the ball over from close range in extra-time, while Harder first saw her shot stopped by Zinsberger and then sent her bullet header wide on 120 minutes.
“It was great to get to the semis in our first tournament, conceding once in five games,” said Austria coach Dominik Thalhammer.
“Today was close and we missed four penalties, which cost us.”
“It wasn't our best performance, but the overall tournament has been very good for us.”