2 botones y 1 led

J-M-L, gracias a tu sugerencia, he cambiado un poco tu diagrama de estado:


Como lo puedes ver, he aumentado el "botón 3", que directamente pasa de LED_ON a LED_OFF.
Por favor, revisa el programa si lo hice bien:

#include <OneButton.h>  //https://github.com/mathertel/OneButton (doc @ http://www.mathertel.de/Arduino/OneButtonLibrary.aspx)

const int  botonPin1 = 2;
const int  botonPin2 = 4;
const int  botonPin3 = 7;
const int  ledPin    = 13;
const int  relayPin  = 9;

OneButton boton1(botonPin1);  // activo LOW con PULLUP integrado
OneButton boton2(botonPin2);  // activo LOW con PULLUP integrado
OneButton boton3(botonPin3);  // activo LOW con PULLUP integrado

enum : byte {LED_OFF, ESTADO_B1, ESTADO_B2, LED_ON} estado;

void apagaLed() {
  digitalWrite(ledPin, LOW);
  digitalWrite(relayPin, HIGH);
  estado = LED_OFF;
}

void enciendeLed() {
  digitalWrite(ledPin, HIGH);
  digitalWrite(relayPin, LOW);
  estado = LED_ON;
}

void click1() {
  switch (estado) {
    case LED_OFF: estado = ESTADO_B1; break;
    case ESTADO_B2: apagaLed();  break;
    default: break;
  }
}

void click2() {
  switch (estado) {
    case ESTADO_B1: enciendeLed(); break;
    case LED_ON: estado = ESTADO_B2; break;
    default: break;
  }
}

void click3() {
  switch (estado) {
    case LED_ON: apagaLed();  break;
    default: break;
  }
}

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(relayPin, OUTPUT);
  boton1.attachClick(click1);
  boton2.attachClick(click2);
  boton3.attachClick(click3);
  apagaLed();
}

void loop() {
  boton1.tick();
  boton2.tick();
  boton3.tick();
}