So here’s the thing. If there is a convenient upper limit to the number of monsters that can be on-stage at any given time, you don’t really need Dynamic Objects. You create N “blank” monsters, and swap them in and out as climbingstars suggests.
If there isn’t such an upper limit, then the player could conceivably run out of dynamic memory no matter what, by invoking too many on-stage monsters at the same time. (But really, your game will become impractically complex long before that. What strategy is a player going to employ against 16 monsters at the same time? 32? A text interface is not good at that sort of situation.)
You could also use Dynamic Objects to create monsters but then swap them off-stage for reuse.
No matter what, this leaves you in a situation of manually setting (or resetting) monster objects to a new template. I suspect you’re already considering this, and it is messy, as you say. The Dynamic Objects extension goes through some low-level contortions to clone a property block. It’s simpler, if more tedious, to just set all the properties by hand.