Problema com "goto"

La instrucción “goto” no debería ser nunca necesaria.

Los corchetes {} crean un bloque de código que se ejecuta como un conjunto, de arriba abajo.
Una estructura de control, como por ejemplo un if() puede hacer que se ejecute una instrucción
suelta o un bloque de código entre corchetes. Cuando solo se ejecuta una instrucción, no son necesarios los corchetes.

Por ejemplo:

if (val =='2') digitalWrite(ledPin2, HIGH);

o, un bloque

if (val =='2') 
	{
	digitalWrite(ledPin2, HIGH);
	Serial.println("LedPin2 activo");
	}

Los grupos if..else anidados pueden dar lugar a un código muy confuso y que puede contener errores fácilmente. Creo que eso es
lo que le pasa a tu código. Se trata de identificar a que if corresponde cada else y eso suele ser complicado.

Como los diferentes valores de "val" son mutuamente excluyentes (solo se ejecuta uno de los if), creo que el código podría funcionar como sigue:

void loop()
{
   val= Serial.read()-48;

   if(val =='1') digitalWrite(ledPin1, HIGH);
   if(val =='2') digitalWrite(ledPin2, HIGH);
   if(val =='3') digitalWrite(ledPin3, HIGH);
   if(val =='4') digitalWrite(ledPin4, HIGH);

    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin2, HIGH);
    digitalWrite(ledPin3, HIGH);
    digitalWrite(ledPin4, HIGH);
    
    delay(500);
    
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin4, LOW);
}

Para este tipo de estructuras en las que hay varios comportamientos posibles según el "caso" suele emplearse la instrucción switch...case

El código quedaría asi:

void loop()
{
   val= Serial.read()-48;
   
   switch(val)
   	{
   	case '1': digitalWrite(ledPin1, HIGH); break;
   	
   	case '2':
   		digitalWrite(ledPin2, HIGH);
   		Serial.println("ledPin2 activado"); // Instrucciones hipotéticas
   		delay(10);
   		break;
   		
   	case '3': digitalWrite(ledPin3, HIGH); break;
   	
   	case '4': digitalWrite(ledPin4, HIGH); break;   		
   	
   	default: Serial.println("Valor de val ilegal");	
   	}

	escribe4Pines(HIGH);
    
    delay(500);
    
	escribe4Pines(LOW);	
}

void escribe4Pines(int valor)
{
	digitalWrite(ledPin1, valor);
    digitalWrite(ledPin2, valor);
    digitalWrite(ledPin3, valor);
    digitalWrite(ledPin4, valor);	
}

(He incluido la función escribe4Pines() para ilustrar cómo se definen y usan funciones)