I think this is an annoying solution to the issues it’s addressing.
It penalizes you for catching a unit up in EXP because their not-first levels won’t have that bonus, harming you for having the audacity to want to bring a unit up to par after having not used them for a bit - which is already not easy. I can’t imagine it feeling good to experience either.
The goals are to make players actually feel rewarded for training multiple units and to prevent one-or-two unit runs.
Having enemies with diverse flaws that consistently do real amounts of damage actually does most of the heavy lifting for both of those on its own. If you have a slightly fast enemy with an armorslayer, oop, your knights are dead; if you just have a non-knight unit it’s fine. Add a line of weapons with 60+ base critical but low might and you’ll define a scenario for ranged and high-defense units like archers and knights to shine.
If you then want to make sure that players actually feel rewarded for levelling up units, instead of the guarantee being on first level, why not guarantee rolling multiple stat ups on every level?
Of course, that then brings you back to “dump all EXP on one unit”, but we have a very natural solution there as well, the importance of the level difference in the EXP formula.
In base GBAFE, the EXP formula barely accounts for level differences. Battle EXP only uses one third of the level difference to adjust the base value of 10 EXP, whereas kill EXP uses the whole difference but has another flat bonus of 20.
30 ± (4/3 * LvDiff) does not give you the dramatic fall-off that you want in order to prevent EXP dumping from kills, and 10 ± (LvDiff / 3) for combats doesn’t help this.
Just making the difference matter more hugely stops EXP hoarding - 30 ± (3 * LvDiff) for example means your unit that’s up 10 levels on the foe goes from getting an almost reasonable 17 EXP to just 1.
I wrote a bit much information but deleting work is hard/feels bad
In base GBAFE, it matters fairly little - (31 + Lv Diff) / Player Class Power where almost all classes have 3 power means that a level difference of ten, 25% of the possible range, is an EXP difference of 3. Dramatically raising the importance of this wholly prevents you from investing all EXP into just one or two units.
For example, a formula like 2 * (5 + Lv Diff) means being down two levels lets you get 14 EXP per combat while being up four levels brings you from 10 down to a mere 2.
The kill formula is very annoying but it’s essentially Dmg + (Level * Class Power difference) + Bonuses. The reason why you can get so much EXP on high-level units is because the base kill bonus is 20, and there’s an additional 20 for thieves and additional 40 for bosses.
Because class power is almost always 3, even though kills double dip on the level difference, it does not make a large impact as it’s only 1.33x the level difference.
It’s only not 3 for…
Staff locks (Priest Cleric Troubadour); Manaketes (Fa/Myrrh); and Thieves: All with class power 2, but respectively, can’t get fighting EXP, hard-cap at 20, and are not statted for fighting.
Trainees (Journeyman, Recruit, Pupil); with class power 1.
This class power difference is actually factored in the promotions - Bishops, Valkyries, Rogues, and Assassins have a class bonus of 40 (Level cap of 20 x class power of 2); whereas other promoted units have a class bonus of 60 (Level cap of 20 x class power of 3).
And on both Eliwood modes, Hector Normal, and before the route split in Sacred Stones; if the player’s total class level component is higher than the enemy’s, you halve the player’s, so despite promoted units inherently having a class bonus of 60, they earn EXP almost as fast as an unpromoted unit -
Level 10 promoted player kills level 15 unpromoted enemy:
(31 + 15 - 30) / 3 = 5 combat EXP
(15 * 3 + 0) - ((10 * 3 + 60) / 2) + 20 = 45 - 45 + 20 = 20 kill EXP, totalling 25 EXP.
- and units a hair above the foe level far faster than if the player was a lower level.
Level 18 unpromoted player kills level 15 unpromoted enemy:
(31 + 15 - 18) / 3 = 9 combat EXP
(15 * 3 + 0) - ((15 * 3 + 0) / 2) + 20 = 45 - 22.5 + 20 = 42.5 kill EXP, totalling 51 EXP.
Level 14 unpromoted player kills level 15 unpromoted enemy:
(31 + 15 - 14) / 3 = 10 combat EXP
(15 * 3 + 0) - ((14 * 3 + 0) / 1) + 20 = 45 - 42 + 20 = 23 kill EXP, totalling 33 EXP.
Like, holy smokes, I hate fe7 for this every time I remember it.
…
Implementing a minimum number of stats per level up is not particularly difficult, the vanilla game even has a system in place for rerolling your zero-stat levels. But only up to three total rolls and it’s not a full reroll every time.
Implementing a system for checking if it’s a unit’s first level of a map, however, is much harder, but only because you need to store that information somewhere, since you can’t compare it to the save file level. We already have save modifying done in multiple ways, you could also track it within the event flags instead (though that would prevent your chapters from having the full possible number of flags available, so you may not want that).