I understand your feelings but you really do need to change the sketch in order to remove the blocking code
If you look at my example then you will see for each state there is code to determine whether it is time to move on to the next step in the same effect. If so, then the code makes the required changes to the output, notes the time of change ready for the next time check then goes back to loop(), otherwise it goes back to loop() immediately
To make it more like the example that you have then the switch/case could call an amended version of one of your current functions, for example (COMPLTELY UNTESTED)
void colorWipe(uint32_t c, uint8_t wait)
{
unsigned long currentTime = millis();
static unsigned long previousTime = currentTime;
static byte currentPixel = 0;
if (currentTime - previousTime >= wait) //time for a change ?
{
currentPixel++; //next pixel
if (currentPixel == strip.numPixels) //all done ?
{
currentPixel = 0; //back to the start of the strip
previousTime = currentTime; //reset the start time
strip.setPixelColor(currentPixel, c); //set colour of next pixel
strip.show(); //show it
}
}
}