Just going to theorycraft here and then see if it works.
Give worker a huge buildtime that everything completes in one turn, but have to make it so that roads have a larger buildtime, so we hope building road/railroads don't waste up charges. (unless we want it to)
Give worker five promotion. Each promotion act as a dummy to represent charges. Give the default worker, three. Pyramid and Liberty policy will have Lua to detect whether or not it was picked and then grant its respective charges.
Using GameEvents.BuildFinished, remove one charge/promotion upon building an improvement. If it's the last charge/promotion, Unit:Kill().
However, using repair or removing a feature will most likely waste up a charge as well, and I'm not sure how well the AIs can respect this feature considering they replace almost every improvements over and again.
If we used VMC/Community Patch however, we can use the GameEvents.TileImprovementChanged instead which can help circumvent the issues I've mentioned above.
But this is all theorycraft. If someone experienced with GameEvents.BuildFinished could tell me if repair or removing a feature would lose a charge, that'd be useful.