Background-wise, Little Samson is actually doing less than it could be to avoid tile repetition. They have repeated 8x8s tiles in the tileset, and you can avoid doing that on any mapper. The first level could have used 41 more unique 8x8 tiles than it actually used had they not repeated 8x8 tiles. So background-wise, MMC3 doesn't have much to do with why it looks good.
Sprites... it's a hard question to answer. Or I mean. The short answer is you can't really do that on Mapper 30, but that's not a
helpful answer.
Let's check out that fan game I made:
On the left, you can see the gameplay. On the right are the 256 sprite tiles NES can have in memory at any one time. I tried to slow it down so it's easier to see: When Ajna (the player character) moves, the top 64 tiles change to a set of 64 tiles that contains whatever is needed to display what she's doing on that specific frame. When the enemy moves, the bottom 64 tiles change to a set of 64 tiles that contains whatever is needed to display what it's doing on that specific frame.
This is a benefit of MMC3. You can swap a 64 tile portion of sprite tiles without affecting the other 192 sprite tiles. Both Ajna and that enemy have their own portion of the sprite tiles. MMC3 gets six portions of the 512 tiles NES has in memory at one time. (256 for the background and 256 for sprites.) It can swap each "portion" fully independently.
There are no "portions" in swapping using mapper 30. ALL of the tiles! Not just all the sprite tiles. ALL the 256 tiles from both the sprite AND the background set must be swapped all together at once.
On mapper 30, you have four sets of 512 tiles available to swap to during play.
What does this mean for your example? Say you have four sets of 128 tiles for your player character. (I say four instead of three because it makes the examples easier. I say 128 instead of 90-100 because it makes the examples easier.) If you want your NPCs to animate independently of your player character, you can only use 128 total tiles for them. Why? Because there are only four sets of tiles. Your player character has the tiles for different animation frames on all four of them. If an NPC wants to switch to a different set than the player character, one of the two will be displayed with the wrong set of tiles. The reason why 128 tiles for the NPCs works is because the same 128 is duplicated in all four sets. (So all frames will contain the same tiles on the NPC side, and thus, will just display the same thing.) The second something is different in the four sets, it becomes harder to animate independently of something else that wants to be different in the four sets.
Even if you use three sets, like in your example, it doesn't help. Because if you have three sets for your player character, and two sets for NPCs, three times two is six which is more than the four you have. If you had two sets for your player character and two sets for your NPCs, you could do it. If your two player character sets were 0 and 1, and your two NPC sets were 2 and 3, your four "swap sets" would be
0 and 2, 0 and 3, 1 and 2, 1 and 3. So even in a situation where the two need different portions, it still fits in the four sets you have through the power of duplication.
You could have two background frames, and two player sets animated independently. You could have four background frames and one player set. Anything that needs tiles spread across multiple sets needs its total number of sets multipled with anything else that needs tiles spread across multiple sets. If the result is greater than 4, you can't really do it (with swapping) on mapper 30.
Edit: Oh, and sort of an example of the 128 tile thing. Check out the above GIF again. Notice how the very end of Ajna's tiles are the HUD tiles. These don't change. If I wanted the HUD to animate independently of her rather than remain static, I'd need to multiply the number of Ajna's sets by the number of the HUD sets I wanted to allow it to happen. Technically I still need to do this! It's just that the number of HUD sets is 1. Alternatively, I could give the HUD it's own portion, but that'd be kind of overkill and steal a "portion" from something else. It'd mean one less really animated thing could be on the screen at the same time.
It gets tricky to say what you
can do, though. Mapper 30 can "update" tiles (instead of swapping them), but the limitations of this are odd to make simple. The size of your character matters, and how your data is stored matters and if you scroll matters and all kinds of other things matter when you're "updating" tiles. Basically
nothing matters when you swap.
But one example is this: Say your player character is only 16x16. You can "update" just their four tiles every frame, and this leaves 252 tiles for everything else, that can be swapped independently of the player character. I can't even really answer how big you could go without actually building it, it's tied to a lot of things.