Se fosse a ti esquecia o delay porque eventualmetne vais querer fazer algo mais e o programa não vai funcionar.
Faz algo deste género:
//fora da loop()
unsigned long temporizacao = 0;
unsigned char inicio = digitalRead(pinoBotao);
unsigned char contando = 0;
if (inicio == 1) { //botao pressionado
temporizacao = millis();
digitalWrite(LED1, HIGH);
contando = 1;
}
if (contando == 1 && (millis() - temporizacao > 30000)) { //passaram 30 segundos e contando esta activo
contando = 0;
digitalWrite(LED2, HIGH);
}
Não disseste como queres fazer reset aos LEDs logo deixo isso para ti.