As I understand it, a little bit of everything was done to make up for the shortfall:
1. Spare capacity was used. This makes scheduling tighter and maintenance costs go up.
2. New routes and extra flights that were going to be added to the schedule, weren't.
3. Planes that likely would have gotten parked rather than go through another C/D check instead got the overhaul and are still flying.
4. Carriers that were trying to consolidate types, still fly whatever they were trying to get rid of (or have brought them back into service).
5. Carriers leased planes and probably brought some parked planes back online.
Airlines were lucky in that there weren't that many Max8's in service yet (which also speaks to how unsafe they were to rack up 2 crashes so early), so the grounding didn't eliminate that much capacity as delay planned growth and retirement of airframes.
There is also more spare capacity than you might expect because the fleets are sized for peak operations - thanksgiving, christmas, etc. The rest of the year, the extra capacity allows them to get by with fewer active maintenance people (peak demand vs average demand).
Similarly, there are probably more parked planes than you expect. Again, they are usually up against a C/D check and that check will only get done if it looks like that airframe can earn back the couple $million that the overhaul would cost. The engines usually stay in general circulation and again, smooth out the peak/average maintenance demand.