How would I take the average color of a material (lighting included) and turn that into a flat color?
The only way I can think of achieving this would be to have each mesh assigned its own 1x1 image and use the UVs to Bake the image from the surface.
Since the image is just a 1x1 single pixel, the whole bake will be merged into that single pixel. The image can then be used to shade the surface.
Note that this would be Cycles only (for the baking - you can use the image in Eevee, just can't bake it there since Eevee doesn't (yet) support baking) and that there would be a great deal of setting up to create and bake an image for each material.
It would be feasible to use scripting to automate the creation and baking of the images to apply to a whole scene/frame.