Yes, a testbench can also be passed. The testbench is dependent on itself.
Note that there are important changes that VUnit can't detect directly. Let's say you have no changes to your HDL files but there's a stimuli file to tb_x that changed. In that case tb_x should be simulated. The way to deal with that is to process the changes reported by your version control system. If the stimuli file has changed, tb_x is added to the list of files.
Preprocessing works. VUnit keeps track of both the original file name and the preprocessed file name and the user-provided files are compared with the original.
Your understanding of run_dependent is correct. Agree that the name is a bit misleading and should be changed. I'm thinking about include_dependent_in_test_pattern because it makes it easier to also add a exclude_dependent_from_test_pattern.