People are right - it is hardcoded.
However, there is a way to get around it with python. Basically - when a unit wins a combat, you can set them not to be able to get a promotion (you had to do the same on the unitCreated, and beginPlayerTurn events too). Then you check to see if they can get a promotion using your values, and if they can, re-enable the promotions.
If you have any trouble with that, just ask and I can bodge you up a quick script to sort it out.