You can access hostvars in a callback, those specified by inventory are "easiest" such as:
hosts = self.playbook.inventory.get_hosts()
host_vars = self.playbook.inventory.get_variables(hosts[0].name,
self.playbook.vault_password)
You have access to self.task,
self.play and self.playbook. All of those objects have a number of accessible methods and attributes that you can generally use to find the info you need.
Be aware though, that the v2 code branch will likely cause some backwards incompatibilities in accessing those attributes in the future.