Changing modes with one touch button; on-mode1-mode2-mode3-off-on-mode1, etc.

if (digitalRead(pushbutton) == HIGH){
        delay(20); // button debounce
        buttonPushCounter++;

This will increase the value of the counter every 20 (plus a little) milliseconds, for as long as the switch is held down. That is most likely NOT what you want to do.

You need to compare the current state of the switch to the previous state of the switch, and do something only when the values are not the same (a transition has occurred). Of course, this means that you need to save the current state as the previous state, at the end of loop.

You can tell whether the transition is from pressed to released or from released to pressed by the current state of the switch, so that you don't increment the value when the switch is pressed and again when it is released.