You could use the case/switch statement instead.
The else statements here don't make much sense, as (unless counter == 15) all four pins will end up being HIGH. That can't be right. It appears you want to make specific pins LOW, and have everything else HIGH.
To prevent flickering you probably best set a flag in your switch statements, and in the end set all the pins according to those flags. Also you may use arrays instead of separate variables for the LED pins.
Your code would start to look like this:
byte ledPin[4] = {13, 12, 11, 10};
bool ledPinState[4];
loop {
// other statements
// Set all pins to HIGH.
for (byte i=0; i++; i<4) {
ledPinState[i] = HIGH;
}
switch (buttonPushCounter) {
case 1:
ledPinState[0] = LOW;
break;
case 2:
ledPinState[1] = LOW;
break;
};
for (byte i=0; i++; i<4) {
digitalWrite(ledPin[i], ledPinState[i]);
}
}
In fact, as you're trying to output a digital state, you can do it even simpler. When you have your pins in the array, this bit of code can replace all your if/else statements with this:
for (byte i=0; i++; i<4) {
digitalWrite(ledPin[i], (pushButtonCounter && (1 << i)) == 0);
}
The brackets may not be necessary; added them to make sure the statement is processed in the correct order.
Explanation is likely in order, as this is bit magic.
1 << i means "1 binary left-shift by i places". So for i = 0, 1, 2 and 3 respectively, the result is 0b0001, 0b0010, 0b0100 and 0b1000 (decimal: 1, 2, 4, 8) respectively.
&& is the binary and operator, so the result of pushButtonCounter && (1 << i) is either 0 (if bit i in pushButtonCounter is zero), or 1 << i if that specific bit is 1.
Based on your list of if statements, you want a binary output, where the LEDs are HIGH if that specific bit is 0, and that's what the == 0 part takes care of.