Should be doable, but the route you'd want to take depends on how comfortable you are with Ruby scripting.
If you can script, you could create new properties in Game_BattlerBase (or Game_Battler or Game_Actor, depending on your needs) for each "persistent" effect (such as Cursed, which lasts three battles) that start at -1 and are set to the appropriate amount of battles via script call when an item/skill is used that introduces a persistent effect (e.g., when an actor uses the Cursed Talisman item, their "Cursed" variable is set to 3 and the Cursed state would be applied). Then, you'd want to create a method that runs at the end of each battle (I think you'd want to call it from battle_end in BattleManager) that decreases each persistent effect value by 1, and if the value of a value is zero, it would remove the appropriate state from from the battler.
If you can't script, it gets clumsier, but it's still doable. You will want to make a "battle start" common event that can be called on Turn 0 of each troop, and reserve a variable for every possible combination of actor and persistent effect (e.g. if there are 5 possible persistent effects and 8 actors, reserve 40 variables). When the item/skill is used on an actor, make sure that item/skill applies a dummy state (which has no actual effects) to the actor, and run a common event (as an effect of the item/skill) that looks for actors affected by the dummy state and then sets the appropriate variables for that actor-dummy state combination (so that if Eric has the Cursed Dummy State applied, it sets the "Eric Cursed" variable to 3). Then the common event should apply the ACTUAL persistent effect state, and remove the dummy state, for that actor. Finally, make the "battle start" common event - it should decrease each variable by 1, and if the values are LESS than zero, remove the persistent state from the actors, and add a Common Event call event to Turn 0 for each troop in your game.
For either method, remember to make sure that all the Removal Conditions are unchecked.
Let me know if some part of this is confusing and I will try to clarify with some pseudo-code. Hope I helped!