Si può fare con tutti e due gli approcci.
Quello che devi tenere a mente è che nei sistemi Arduino hai due funzioni principali, setup() e loop() e sfruttarle a tuo vantaggio.
La prima viene eseguita all'avvio, mentre la seconda continuamente.
Se non ho capito male le esigenze, ti basterebbe usare una variabile booleana che dopo aver eseguito la funzione selezionata metti = true per impedire una seconda volta la funzione fino al successivo riavvio.
if( ! eseguito) {
* elenco[indice]();
eseguito = true;
}
//Resto del codice per selezionare la funzione con i pulsanti
La variabile indice ovviamente va salvata in EEPROM ed assegnata nella funzione setup().