Why does "this" need to be passed in to every resource?

This could also be answered with the corresponding opposite question: Is there a scenario where you would not pass in “this” to a resource?

Resources are organized into a tree (mainly to help the automatic naming). The scope parameter (which you’ll often see this passed to) is the parent reference.
If you wanted the resource tree to be flat, but still have grouping, then you would pass that scope along and only use this at the top level. You may want to do that as resources at the root level are just named based on the id parameter.