When you look at it more in depth, a 20 year old has been in the league longer and knows more of the nuances and knows how to handle problem an 18 year old rookie wouldn't. Also a 20 year old is more often then not given more icetime as opposed to an 18 year old. Also probably knows the system better and is more acclimated to the team/league. All factors that could increase the numbers these guys put up.
When you look at it, players in juniors progressively put up more points from one season to the next, so there's has to be some difference.
FWIW, CHL rookies aren't usually 18. They're 16 if they're well-regarded prospects or maybe 17 if they're roster filler. Or 15 in the like 7 cases of their being someone who qualified for Exceptional Player status (excusing the WHL's handful of circumstances to allow 15-year-olds to get a few games in the league)
Just as a for instance using my team (Vancouver Giants), the age breakdown for guys on the roster at season's end was:
20yo (97s): 3
19yo (98s): 4
18yo (99s): 9
17yo (00s): 7
16yo (01s): 5 (though only 2 played with regularity, and a 3rd was the backup goalie)
15yo* (02s): 4, totaling 15 games
Note that I'm using CHL age calculations, which are basically just (year the season starts in) - (player's year of birth). So every player born between January 1, 1997 and December 31, 1997 counts as 20 years old by the WHL calendar for the 2017-18 season. It doesn't matter if they were 20 before the season began, turn 20 while it's under way, or even turn 21 between January and April of the back half of said season, the league registry treats them as 20 years old all season long for roster purposes.
*there has yet to be a WHL exceptional player, so all 4 players who logged games as 15yo players (aka 2002 birthdays) did so under the league's normal restrictions. 1 of them played a single game, 2 played 4 games, and 1 played 4 games in an earlier part of the year and a couple more after his midget season ended as an injury replacement)
So if you look at that, the bulk of the Giants were actually 16-18, meaning over-agers have a 2 year developmental/maturity advantage on them, which can be a big thing.
I don't want to get too far down the rabbit hole here because I'm saving some of this material for other projects, but there exist some rough models out there that use aging curves to fiddle with junior player production and figure out scoring equivalencies for players of different ages. In other words given the natural progression of player impact/dominance in the CHL as the players get older, it tells you how many points an 18/19/20yo player needs to score for it to be roughly equivalent to the output of a 17 year old in the same league. So because we have a full set of seasons including an overage year, let's look at Halbgewachs (I was going to do Gregor, but that leaves us with just 3 seasons of data discounting his small sample size age 16 year
2012-13 (age 15 season): 0 pts in 1 GP
2013-14 (age 16 season): 1 pt in 4 GP
2014-15 (age 17 season): 8 pts in 59 GP
2015-16 (age 18 season): 41 pts in 69 GP
2016-17 (age 19 season): 101 pts in 71 GP
2017-18 (age 20 season): 129 pts in 72 GP
Let's toss out ages 15 and 16 in account of sample size.
So the modifiers are:
17: 1.00
18: 0.84
19: 0.674
20: 0.52
And thus Halbgewachs' point equivalencies are:
17: 8 .00
18: 34.44
19: 68.07
20: 67.08
Normally I would've also smoothed things out a bit by pro-rating those adjusted totals to the same number of GP to account for differences in the length of their personal season, but it's hardly necessary here since his 18-20 seasons all were within 3 games of one another and his 17 season's scoring total is so far behind the others and so low that it wouldn't meaningfully close the gap by adding another 11-13 games worth of production.
Obviously this shows that Halbgewachs did make some meaningful strides in his post-draft years in terms of scoring output. The gaudy 19 and 20 seasons look less gaudy with adjustment, but show someone who essentially almost doubled their relative production in their post-draft years, and that even with the impact of being an over-age guy this year, it's not like his stupid crazy scoring output was propped up by being 20 years old. Rather, the increase in scoring rate over the previous season simply indicates the impact of him being a year older.
But more to the point based on the original discussion this grew from, you can use those adjusted totals to see how the impact of just a couple years changes the "value" of scoring totals. His simply being a year older this season vs last was essentially 'worth' 30 additional points on his output. And that for each year a player gets older, it gets easier for him to score. Easier to the tune of a built-in expectation of a 20-30% scoring increase for him to maintain an equivalent production level.
FWIW, I'm not going to run Gregor's numbers, but he actually appears at a glance to be backsliding based on his totals. That's actually kind of concerning. That said, there are also means of comparing scoring output across multiple leagues for differences in quality of play and Gregor still fit in the top 7-10 prospects for most of the year, so at the very least there's still hope. Some of his slide may have also resulted of being usurped in his role. As Moose Jaw got better they turned to older players like Halbgewachs and Brayden Burke to carry the load instead of Gregor, and once on Victoria he was most often on the 2nd line while the Phillips/Soy/Hannoun line carried most of their output. So Gregor may be seeing some reduction simply on account of shrinking usage. Who knows.