Dividing LEDs into different groups

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;
    }
  }
}