They had to dig in during the early stages as Quins closed on their line, but once they got on to the front foot they soon grabbed the lead as Steenson slotted over a penalty after the visitors were penalised at a scrum.
Evans passed up on an immediate chance to reply, hitting a 25-metre penalty the wrong side of the uprights, a miss which allowed Steenson to double Exeter's lead when a second chance came his way.
The fly-half did get Harlequins on the board after Exeter strayed offside.
But after play had been held up for several minutes by an injury to Karl Dickson - which saw the Quins scrum-half carried off - Steenson slotted over two more penalties from in front of the posts to make it 12-3.
Evans failed to take a chance to reduce the arrears on the stroke of half time, a miss which proved even more costly when Johnson took Jason Shoemark's pass and shrugged off the tackle of Jordan Hall-Turner to score immediately after the restart.
Steenson missed the conversion from out wide, but put the result beyond doubt with his fifth penalty after Evans had added his second kick off the game.
Exeter Chiefs head coach Rob Baxter told BBC Radio Devon: "I think we've taken a couple of steps forward today that we've been waiting to take for a little while.
"We showed that with a little bit of belief and a bit of composure, and being prepared to play just a little bit more rugby what the dividends can be.
"What pleases me the most is that it wasn't a lucky win. We deserved to win today and that's when you know that you're taking steps forward."
Harlequins director of rugby Connor O'Shea: "You have to give massive credit to the Chiefs today - they out-worked us - we had the line breaks but we didn't protect the ball.
"It is incredible to come away without scoring a try given the number of clean breaks that were made.
"You saw their attitude in abundance the way that they scrambled - when they were broken they got back and made their tackles, we didn't do that - so all credit to Chiefs."
Replacements: Dollman for Naqelevuki (71), Poluleuligaga for Thomas (71), Moon for Sturgess (71), Whitehead for Clark (58), Tui for Budgen (61), Phillips for Johnson (58), Slade for Baxter (64). Not Used: Davis.
Replacements: Williams for Camacho (68), Moore for Dickson (30), Jones for Marler (65), Brooker for Gray (50), Lambert for Johnston (55), Vallejos Cinalli for Kohn (62), Browne for Robson (12). Not Used: Clegg.
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.