De Jong conceded the penalty that allowed Mikel Oyarzabal to equalise, though, and it was Sociedad who threatened most as the game entered extra time, with Marc-Andre ter Stegen in strong form and substitute Adnan Januzaj hitting the post with a free-kick.
Ter Stegen proved pivotal in the shoot-out, making two saves, before Riqui Puig buried his spot-kick to send Barca through.
The Germany international made a fine one-on-one save to deny Alexander Isak as La Real looked by far the more threatening in the early exchanges.
The Catalans' growing pressure told six minutes before half-time, Antoine Griezmann clipping a cross towards De Jong, who reacted well to steer a header past Alex Remiro.
But De Jong handed Sociedad an equalizer 51 minutes in, his handball allowing Oyarzabal to send Ter Stegen the wrong way from the spot.
An end-to-end contest ensued, La Real threatening on the breakthrough Isak and both Pedri and Griezmann coming close with powerful efforts.
In extra time, Ter Stegen made a spectacular one-handed save to keep out Joseba Zaldua's rocket before Dembele sent a shot straight at Remiro after Griezmann had stolen back possession.
Griezmann saw a volley smothered and Barca were very nearly hit on the break, Ter Stegen doing enough to deny Oyarzabal after the forward had failed to connect properly with Januzaj's cross.
Januzaj himself had a shot just prodded past the left-hand post after a strong run and then came closest of all to a winner, clattering the post with a wicked free-kick as Ter Stegen looked to get a fingertip to the ball.
De Jong hit the post with Barca's first penalty, but Ter Stegen saved from Jon Bautista and Oyarzabal and Willian Jose hit the post after Dembele had scored.
Griezmann skied his effort horribly after Miralem Pjanic and Mikel Merino each scored, but although Januzaj also converted, Puig showed nerves of steel to send the Catalans into the final.