I believe with_first_found only searches for files at the moment, it does not look in templates or vars files for this, so you'd have to give it a relative path from the main.yml you're using it in. For example, assuming this is from tasks/main.yml, you would use:
with_first_found:
- "../vars/{{ ansible_distribution }}.yml"
- "../vars/{{ ansible_os_family }}.yml"
- "../vars/default.yml"
You could skip the last line too, and just have the defaults stored in defaults/main.yml too, and have a "when: item is not None" as a conditional on the include_vars.