How can I correct collisions and preserve mesh during dynamic simulation?

Then I would re-mesh the geometry.
See for instance: Re-meshing in fluid structure interaction - #2 by dokken
or
Remeshing with cashocs — cashocs 2.0.0-dev documentation
or
GitHub - wildmeshing/fTetWild: Fast Tetrahedral Meshing in the Wild