Hosts Korea were leading 3-0 but suddenly had their backs to the wall after a thrilling 10 minutes of pressure saw China score twice late on and go close to a third.
Korea, who have lost once in 19 matches since the Asian Cup final in January 2015, got a fortunate lead after 20 minutes.
Son Heung-min's free kick teased Chinese goalkeeper Zeng Cheng and Zheng Zhi directed the ball into his own net.
The Koreans went 2-0 up through Lee Chung-yong's powerful second-half header and the game looked dead and buried when Koo Ja-cheol bundled home Son's cross in the 66th.
The match was played against a backdrop of political tension between the East Asia neighbours over Seoul's decision to deploy an advanced U.S. anti-missile defence system to counter threats from North Korea.
The atmosphere at Seoul's World Cup stadium had an unusual dynamic after the Korea Football Association allocated 15,000 tickets to Chinese fans, with the entire south stand given over to the visitors to make security easier.
Those supporters were on their feet in the 75th minute when a poor clearance from Oh Jae-suk fell to Chinese midfielder Yu Hai and he slammed the ball past goalkeeper Jung Sung-ryong.
JUNG SAVE
After struggling to get a shot on target for the entire game, China then grabbed a second goal two minutes later through Hao Junmin's superb free kick.
With the game on a knife-edge, the visitors almost claimed an equaliser when Ren Hang's volley was tipped over by Jung.
South Korea coach Uli Stielike said the tide turned due to the error that let China score their first goal.
"It was a pity Oh Jae-suk made a mistake after playing so well. That was a turning point and things got difficult," he said.
China coach Gao Hongbo said that despite the defeat the game would help his inexperienced side in their remaining qualifiers.
"We are up against Iran next. They are another strong team with lots of experience," he explained.
"China lacks experience at the top level so in that sense I believe the Korea match helped a lot."
LATE DRAMA SAVES IRAN'S BLUSHES
In the other Group A games, goals from Iran's Reza Ghoochannejad and Alireza Jahan Bakhsh in stoppage time gave the hosts a dramatic 2-0 win over Qatar in Tehran.
Substitute Ghoochannejad steered the ball home in the 94th minute after a poor clearance from goalkeeper Claude Lecomte, sparking wild celebrations that resulted in added time being extended by the match officials.
Jahan Bakhsh doubled Iran's lead seconds before the final whistle with a powerful left-foot shot to ensure Iran ended the day top of the section on goal difference.
A second-half strike from substitute Alexander Geynrikh gave Uzbekistan a hard-fought 1-0 victory against Syria in Tashkent in a match with few clear-cut chances.
Neither side looked likely to break the deadlock in a drab first half but a moment of instinct from Geynrikh, who pounced on goalkeeper Ibrahim Alma's close-range save from Odil Ahmedov's effort, gave all three points to the hosts.
Korea are second in Group A, ahead of Uzbekistan, with the top three teams tied on three points.
Korea next play Syria, while Iran play fourth-placed China and Uzbekistan face Qatar.
The top two in Group A and B qualify for the World Cup in Russia while the third-placed teams meet to decide who goes into a CONCACAF-Asian Zone playoff for a place at the finals.
(Editing by Tony Jimenez and Ken Ferris)