Ok. The age of a newly generated NPC is bounded by a file in LifePlay\Content\Modules\vin_Base\Stats call 'Age.lpstat.'
The code of the file is:
STAT_ID: age
STAT_NAME: Age; How many years old is this person?
PLAYER_ONLY: false
HIGHER_BETTER: no_difficulty_adjustment
STAT_MIN: 18
STAT_MAX: 80
DAILY_CHANGE: 0.00273972602
DEFAULT_VALUE: 33
NPC_ONLY: false
This sets the minimum age of a character at 18 (note that a newly born child can be younger, but they are not 'characters' in game terms; they have no model, and they only serve to trigger certain events), and the maximum age at 80. I'm a little fuzzy on default value, but I think it serves as perhaps a 'centerpoint' on a mathematical distribution that's coded into the game itself.
Interestingly, a child, on aging up past 17 and becoming a character does NOT turn 18, but rather assumes a randomized value, just like any other randomly generated NPC. There's no way I can tell to change this behavior; the randomization of age seems to be part of how the game generates NPCs, and that's not something you can get at with this scripting.
What you CAN do is change the 'default value' down. This will, in theory, tilt the distribution of randomized ages downward. Of course, it will affect ALL NPCs, so you'll live in a world of teenagers. You can also just manually adjust the age of any NPC via the Contact interface.