I'm not 100% sure I understand the requirements, but it could just be due to poor naming.
My first spin would simply remove the need for callers to understand implementation details, e.g.,
mover = Exit.remove_only_after(3)
Internally, Exit would construct an instance using a symbol or whatever that could be checked in the scan method. This way you only need to know the behavior you want, instead of a method name, a symbol, or whatever, that actually implements that behavior.
Depending on actual needs, I might refactor it internal to Exit and use some form of strategy pattern, but it might be overkill. It really depends on how different the behaviors are, and how complex they are.