If you replace the blocking for(int i=0... to manage it without blocking loop(), you need to add a global or static i variable and manage it explicitly. Maybe something like:
void meteorRain(CRGB color, byte meteorSize, byte meteorTrailDecay, boolean meteorRandomDecay, int SpeedDelay) {
static unsigned long lastUpdateTime = 0;
static int i = 0;
if (millis() - lastUpdateTime >= SpeedDelay) {
lastUpdateTime = millis();
fill_solid(leds + 1, NUM_LEDS - 1, CRGB::Black);
// fade brightness all LEDs one step
for (int j = 1; j < NUM_LEDS - 1; j++) {
if ((!meteorRandomDecay) || (random(10) > 5)) {
leds[j].fadeToBlackBy(meteorTrailDecay);
}
}
// draw meteor
for (int j = 0; j < meteorSize; j++) {
if ((i - j < NUM_LEDS - 1) && (i - j >= 1)) {
leds[i - j] = color;
}
}
FastLED.show();
++i;
if (i >= NUM_LEDS - 2) {
i = 0;
}
}
}