Most decent motion controllers will work this way. Using pushbuttons is all about selecting a controller with enough I/O so that you can send or receive signals to and from what you need to control.
We supply and fit Cncdrive motion controllers on the Routers we build/sell that use UCCNC control software and all of the things you ask for above are easily done. You will just need to choose the controller model which provides the amount of I/O you need.