Hanyu, who had a 12-point lead after Thursday's short program, fell on his opening quad salchow but completed all of his other jumps, including seven triple jumps plus a quad toe loop in the free skate to eclipse Chan by 13 points.
"I wasn't completely satisfied with the long program," Hanyu said. "But after falling on the quad I was able to pull myself together and complete all my jumps and that was huge."
Chan also hit all his jumps, but he was unable to erase the deficit and finished with 280.08 points to Hanyu's 293.25. Nobunari Oda of Japan, a late substitute for defending GP Final champion Daisuke Takahashi, was third with 255.96.
"It was a good day and I'm happy with how I skated," Chan said. "I felt nervous going into the long program. It was a mental battle even before I got on the ice."
Beating Chan was a huge boost for Hanyu's chances of being selected to represent Japan at the Sochi Olympics.
"This is a huge step for Sochi," said Hanyu, who will turn 19 on Saturday. "I feel I am meeting all the requirements. We still have the national championships but obviously, I am feeling pretty confident."
Chan said he wasn't disappointed with the result.
"I finished the event strong," the Toronto skater said. "There was a lot of good things I did here, and that was regaining my composure and regaining my concentration after a bad short program and putting out a great long that I don't usually do. It's not very Patrick Chan of me.
"Most of the time, I think people know me well that the short program has always saved me ... but I think today was proof that I'm getting better and really becoming a more well-rounded competitor."
He said his long skate was even more satisfying given his previous track record skating in Japan.
"Honestly, I started thinking about my previous performances here in Japan, and I don't really have the best track record," he said. "The last two times I competed here has for the World Team Trophy, and I really haven't skated well at every single one of those in Japan, just because it's at the end of the season.
"Every time I come back to Japan I feel like I relive those moments where I didn't skate my best and those were really tough times. That's why I think I learned a lot today."
In ice dancing, world champions Meryl Davis and Charlie White of the United States led after the short dance with 77.66 points, seven-tenths of a point ahead of Tessa Virtue of London, Ont., and Scott Moir of Ilderton, Ont.
"Overall it was strong," said Virtue. "Technically we got all the points we wanted which was our objective. We just have to go out and perform the same way in the free dance."
Ekaterina Bobrova and Dmitri Soloviev of Russia stand third at 68.90 just ahead of Kaitlyn Weaver and Andrew Poje of Waterloo, Ont., at 67.68.
"We captured the essence of the program," said Poje. "We didn't lose that uniqueness. We wanted to utilize the taps and the back and forth between the two of us."
Tatiana Volosozhar and Maxim Trankov of Russia were first after the pairs short program with 82.65. World silver medallists Aliona Savchenko and Robin Szolkowy of Germany were second with 79.46 while Qing Pang and Jian Tong of China were third on 75.40.
Meagan Duhamel of Lively, Ont., and Eric Radford of Balmertown, Ont., totalled 73.07 and are fourth less than three points behind third spot. Kirsten Moore-Towers of St. Catharines, Ont., and Dylan Moscovitch of Toronto are sixth.
"This is the type of skate we've been waiting for," said Radford. "After some rough short programs this season, this one gives us a lot of confidence."
Moore-Towers and Moscovitch also came off the ice satisfied.
"We can't do much better than a clean short," said Moore-Towers. "The best part was our energy. We felt comfortable and at home out there. It was fun and when we get to feel it that way, it's enjoyable." The GP Final is the first and only event where most of the world's top skaters will meet before the Sochi Olympics. The women's free skate and the ice dance and pairs free programs are scheduled for Saturday.
— With files from The Canadian Press.Suggest a correction