Lets say for example, you have a role which is tagged with "foo", and some individual tasks within that role are tagged with "bar".
If you run Ansible with --tags=foo, all tasks within that role would be executed. If you used --tags=bar instead, only those tasks within that role tagged as such would be run.
Regarding your second question, in combination to my response on your other post you can combine --tags with the --limit @retry.file, --step or --start-at-task options to further limit your executions.