Dynamically changing the upgrade paths available is definitely very doable via C#, it's just a matter of updating the UpgradeTargets property of the CharacterObject class. Adding more than 2 would be a lot more complex because you'd have to update the party screen to accommodate that.
Edit: I would suggest that you:
1. Expand the UpgradeTargets of your chosen characters to include all the possible upgrade paths you want.
2. Create your own PartyTroopUpgradeModel implementation that determines which paths are available via the CanPartyUpgradeTroopToTarget method.
3. To get around not being able to have more than 2 upgrades in the party screen, have some code (that runs upon opening the party screen or something) that sorts UpgradeTargets such that available upgrade paths are at the front of the array and thus actually show up in the party screen.
You could have any number of potential upgrade paths, just so long as there's never more than 2 actually available to the player. If you want more than 2 available then you're out of luck unless you want to get into editing the party screen, which is no small feat.