Since LabVIEW is a dataflow language you can use the dataflow inherent in your program to make buttons visible or hidden at different points of execution. Then you have to decide how many buttons you want to present to the operator.
For instance, you might always want a stop button presented to the operator, but the button might not take effect when pressed, because the dataflow of the program has not reached a certain point. These kinds of problems can be handled by either partitioning the program into smaller parts, such that a button press program action will be executed without a significant time delay (from the operator perspective) or by showing and hiding the buttons that provide operator control, when appropriate for the program to operate the button function.
You can use some of the vi templates that are available from the start menu, such as queued state machine, or producer-consumer, to help organize the control of operations in the program.