A component is essentially just a script. So we can access specific functions/variables made public within that script as long as we make a reference to it within our script. So intensity and range are both specific to the light component and we can access them.
When we use GetComponent we’re telling Unity to cache that specific component so we can access parts of that component. Note that previously Unity would have certain component that could be accessed without using GetComponent but in general it's a good idea to use it to cache it yourself.
It would be similar if we had our own custom script and we wanted to access things within that script from an external script. Hope that makes sense.
I think I understand what you mean. Instead of creating a variable then using GetComponent you want to access it directly. Unity won’t let you do that with certain components (mostly custom ones). There are some components Unity caches for you automatically.
Usually these are the most commonly used ones. For the Light you could use it directly, although Unity sometimes goes back and forth on which components can be used this way.
So hence why you may see Rigidbody using GetComponent and sometimes it's not used. With Light it's the same way and things like Transform.
For anything custom, like a script you wrote you'll need to use GetComponent as Unity doesn't know what that script contains. Using GetComponent regardless won't do any harm if it's in the Start function as you're telling Unity that you want to cache it once within the start of that function rather than having Unity do it.