In your current implementation, you always iterate through all LEDs. Now change this logic. Iterate only when a button is pressed. If the button is pressed, released and pressed again continue playback from the previous active LED.
Example for sequence: RRGGGB
Button released => nothing
Button pressed for 3 sec => RRG
Button released => nothing
Button pressed for 2 sec => GG
Button released => nothing
Button pressed for 5 sec => BRRGG
In your current implementation, you always iterate through all LEDs. Now change this logic. Iterate only when a button is pressed. If the button is pressed, released and pressed again continue playback from the previous active LED.
Example for sequence: RRGGGB
Button released => nothing Button pressed for 3 sec => RRG Button released => nothing Button pressed for 2 sec => GG Button released => nothing Button pressed for 5 sec => BRRGG