Suponiendo que sabes como configurar puertos, timers e interrupciones, el planteamiento del programa es sencillo.
Pon en bucle la lectura del puerto del pulsador, o mejor vincula el puerto a una interrupción. Cuando detectes el cierre del pulsador, activa el timer ligado a la interrupción (que debes haber configurado al principio del programa para esos 100ms). En la rutina a la que salte la interrupción, lleva un contador con una variable global, para deteminar el led a encender, cuando llegues al final de la cuenta desactivas el timer y vuelves al principio.
Todo con interrupciones (dos), dejaría el main() con un simple bucle eterno vacío, ya que las funciones serían llamadas por interrupciones, tanto la que detecta el cierre del pulsador, como la que se activa con el timer cada 100ms para encender los LED.
PD: No obstante, desde la intuición que dan los años, me parece que te vas a quedar igual que estabas. Cuando alguien plantea un problema de la manera que lo has hecho, sin presentar algún código sobre el que preguntar por cosas puntuales, es porque espera que alguien le de los deberes hechos. Es como cuando los estudiantes copian en los exámenes, no se dan cuenta que la finalidad de un examen no es aprobarlo, sino demostrar que sabes, si lo apruebas con trampas cuando salgas al mundo laboral no sabrás nada.