Österrike fick ett gyllene läge att ta ledningen i den första halvleken då man fick straff, men Puntigam sköt bollen över ribban och 0-0 stod sig.
Det blev inte heller något mål under de resterande ordinarie matchminuterna, och matchen gick till förlängning med ställningen 0-0.
Danmark låg på mest under förlängningen men lyckades inte få in bollen, och matchen gick till straffar.
I straffsparksläggningen blev den danske målvakten Stina Lykke Petersen stor hjälte då Österrike inte lyckades göra ett enda mål, där tre straffar räddades och en sköts över. Den sista, avgörande straffen slogs in av Simone Boye Sörensen.
Avancemanget gör att Danmark nu för första gången någonsin är i EM-final.
I finalen ställs Danmark mot antingen England eller värdnationen Nederländerna, som möts senare i kväll.
Se hela straffläggningen i spealaren ovan.
Startelvor:
Danmark: Petersen - Nielsen, Sörensen, Larsen, Röddik - Troelsgaard, Kildemoes, Jensen, Veje - Nadim, Harder.
Österrike: Zinsberger - Schiechtl, Wenninger, Kirchberger - Feiersinger, Schnaderbeck, Puntigam, Aschauer - Zadrazil - Burger, Billa.