I'm pretty sure something like that is only possible with a tilemap rewrite. Characters/Events are drawn on the same viewport as the map tiles in order to allow, say, trees to appear over the character's head. When changing the tone, this viewport's tone is changed, and this change applies to all sprites drawn on it.
"So why not just draw the map tiles and characters on separate viewports?"
Yeah, not so simple as that. Different viewports with differing z-values are considered first when drawing to the screen, not the sprites' z-values. Even if you were to have two viewports with the same z-value, they won't "combine" the sprites drawn on them together.
Experiment for yourself:
In Spriteset_Map, comment out
and make these changes to lines 37 and 40 (namely, change the @viewport1 into @viewport2):
sprite = Sprite_Character.new(@viewport2, $game_map.events[i])
@character_sprites.push(Sprite_Character.new(@viewport2, $game_player))
Make an event change the Screen Color Tone and test-play.