Iniciar y finalizar programa pulsando un botón

Utiliza interrupciones al BOTON y pon a dormir al micro algo parecido a esto:

#include <LowPower.h>

void loop() {
  attachInterrupt(digitalPinToInterrupt(BOTON), ServicioBoton, FALLING);//Asocio interrupcion al pin del boton
  LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);// Duerme el MCU inmediatamente
  // espera dormido sin contar hasta que se pulse el boton
  detachInterrupt(digitalPinToInterrupt(BOTON));//desactivo la interrupcion por si quiero usar el boton para otra cosa
  abrir();
  programa();
  cerrar();
  //al reiniciar el loop se dormira de inmediato sin contar.
}

void ServicioBoton (){
 // no hace nada, o lo hace tu veras
}

Saludos.