SmarterTrack has always worked where if the ticket status changes to open that it goes to an available agent. If the last assigned agent is available it will go to that agent.
I have not tested the following myself, but you may be able to create an event on ticket status change. If the new status is reopen then perform your desired actions.
If you do not want a ticket auto-reopened after it has been closed, the agent can mark it as "Closed and Locked". If the client then replies to a "closed and locked" ticket, they will get message saying they can't reply. An agent can always manually re-open the ticket, if necessary.