A fairly hacky way to do it:
Have a client-sided add-on to make sure players use shaders. To address people who bypass it, see below.
For every player, send a raycast in the direction of the sun. If it doesn't hit anything, consider the player visible. Otherwise, go through map lights and, based on their datablock radius, determine if they would light up the player, and if they would, also consider the player visible.
When a player is considered visible, apply their avatar preferences.
When a player is not considered visible, hide all their nodes.