The seventh-seeded Stephens rallied from an early break to take a 5-2 lead in the first set, only for Vesnina to win four games in a row and give herself a set point with a welter of winners.
Stephens kept her cool, won the set in a tiebreaker and powered through the second.
She broke Vesnina twice more and clinched the victory on her fourth match point.
"I just said to myself, 'You have to fight for every point and compete,'" said Stephens, who had saved a match point against Russian Daria Kasatkina in the quarterfinals and reached the final after top seed and defending champion Angelique Kerber, the reigning Australian Open champion, withdrew with illness while trailing in their semifinal contest.
"She's a great player, so I knew I had to stay in every point," she said of Vesnina. "When I got a couple of opportunities, I took them, so that was great."