There are multiple ways.
You could basically copy Blinding Light or Entangle, which would set units that did not resist the spell as immobile for the number of turns set in the <iImmobileTurns> tag.
You could also make a spell add a promotion ((either PROMOTION_HELD or a new one you make).
Edit: D'oh. I misread "break" as "make," and thought you wanted modding advice. I don't think there is a way in the game to counteract Blinding Light or Entangle. There is a spell to remove the held promotion, but it only works if the unit in on a "Cage" improvement (given by the exploration result that also makes units on the tile held). Units that are immobile though the timer or a promotion cannot cast spells, so you have to move another unit there. Note that this does not seem to apply to DOMAIN_IMMOBILE units, who cannot move but can cast just fine.
If the unit is held by Blinding Light or Entangle, you would have to use python (probably a new python spell) to let them move again. I believe that you could use the pUnit.changeImmobileTimer(x) function, where x could be any negative integer with an equal or greater absolute value than that of the unit's immobile timer. Note that such a spell would likely be able to expedite spells with a delayed casting.