One way would be to use the Stencil buffer in a shader, which requires a bit of shader knowledge.
Luckily for you, Unity introduced the new SpriteMask component, which does Stencil masking for you.
You can use the SpriteMask component to create areas where certain sprite layers wont render.
So create a big sprite that is transparent black, set it to a specific layer, set it to be “visible outside mask”. Then create your visible area shapes as gameobjects with SpriteMask components, set to mask on the black sprite’s layer.