Villa beat three defenders in the 17th minute before goalkeeper Noel Valladares got a touch to the Spain striker’s rising shot but not enough to keep it out.
Villa scored his 40th international goal in the 51st when his shot from the edge of the area deflected off a defender to go over Valladares. But Villa missed a penalty kick in the 62nd at Ellis Park, sending it wide right.
Spain has three points and can still win Group H with a victory over Chile, which earlier beat Switzerland 1-0 to lead with six points. Switzerland has three points and Honduras has zero.
Villa single-handedly took the pressure off Spain, a favorite coming to South Africa, with a superb individual effort that helped ease the frustration of a 1-0 defeat to Switzerland.
He dribbled between Honduras players before cutting past Osman Chavez to send a right-footed shot into the far corner of the net as he slipped to the ground.
Villa’s fifth career goal tied him with four Spain players as the country’s leading scorer in World Cup play and moved him within four goals of Raul Gonzalez’s record 44. But he shot No. 41 wide on a penalty kick in the 62nd after Navas was tripped inside the area.
Honduras barely remains alive in the tournament after also losing to Chile 1-0 last week.
Spain got back to its classy style and attacked from the start in front of 54,586 fans. It created a handful of chances inside the seventh minute, when Villa’s long-range shot beat the outstretched Valladares but went off the crossbar.
Ramos headed Joan Capdevila’s cross over the net while free at the far post in the 11th.
Navas’ speed kept Honduras off-kilter, while Fernando Torres uncharacteristically missed three clear chances in the first half.
Torres, making his first start since right knee surgery in April, headed over the crossbar before sending a shot high in the 33rd. He then wasted Villa’s fine pass from inside the area at the close of the half.