EDIT: As of now, I no longer need the add on. Thanks anyway!
I see 2 possible solution:
1. Prevent XenForo from logging Promotion History
Seems fairly simple. I'm brand new to XenForo though and have no idea how to do this.
2. Make XenForo not reference Promotion History when the User Group Promotions cron runs, and instead add Promotions if the user is qualified, but doesn't actually have the promotion (user group upgrade).
So like right now I think the cron checks if a user has received the promotion in their promotion history. If not, they get it. If they have received it in the past, then they are skipped and don't get it again (even if it's actually missing).
Instead, I'd need the promotion to be added if they are qualified but missing the upgrade. Like they are supposed to be added to a secondary user group, but aren't in it for whatever reason.
The way XenForo does the check by default makes sense for most situations because it assumes that a user won't be modified, be it manually or through some other add-on. But if a user is modified, it won't recognize they possibly lost the promotion. It only sees in its history that they got it.
This is obviously the more complicated solution, but possibly is the way XenForo should work anyway. The thing with the first solution I think is that you can't then "demote" a user, but that shouldn't be an issue for me.
Anyway, Jake suggested that these would be relevant classes to modify:
Hit me up if you can help! I will gladly pay to help either option become a reality. And soon!