I think it should all be based on various modifiers to life ratings, and make life ratings the main determinants of immigration. Each province should have a 'base' life rating, dependent on real world environmental factors, and that life rating should be modified based on several factors:
1. Population density. Low population densities should lead to higher life ratings. Or, rather, it should follow a bell curve: Very low population densities modify the life rating downwards somewhat but after it reaches a certain point it should go up very high until it reaches another certain point at which time it starts to drop off. Perhaps have it based also on job availability in local RGOs.
2. Capital density. If there's a lot of factories in a province (and thus a lot of available jobs) then the life rating should increase. This should off-set life rating decreases from high population density.
3. Population militancy. An area that's highly militant and rebellious should have a decreased life rating so it doesn't attract any new immigrants.
Importantly, users should be able to mod in new modifiers and triggers so the system is flexible.
There you go, simple, dirt cheap resource wise (no creating complex new systems that aren't already part of the Vicky canon), and highly moddable.
+1
External and Internal Migration MUST be tied to population size and population densities, and I do think that certain provinces must have a hard-coded, set "optimum" population size. Having an optimum population size, after which the life rating drops off dramatically, triggering internal migration, is a necessity in order to properly model colonization and settlement. On one point I would disagree: these optima must be hardcoded. Greenland and Montana will never be able to support a population the size of Southern California or Ohio. A player's ability to change that optimum should be almost non-existant compared to the parameters established by Mother Nature.