A bit late, but I've just come across this very problem and found a solution that works well enough. Thought I'd post it here in case anyone is trying to do something similar.
As far as I can tell, doing this in the database query itself (without too many complicated custom selects / conditions) is not feasible. Category queries do have an option to only return leaf nodes (categories without a descendant), but that doesn't match the problem. After all, we do want to display categories that don't have leaf nodes if none of those leaves are selected.
So the only solution I could find is to fetch all selected categories and then filter them. We want to filter out all categories with descendants that are selected on this entry. We can take advantage of the fact that Craft automatically selects all ancestors of a term when a lower-level term is selected. Because of this, we know that for every category that we don't want to show, one other category in the list will have this category as it's parent. So we can filter the list by checking for this condition:
{% set allSelectedCategories = entry.businessTypes.all() %}
{% set leafNodesOnly = allSelectedCategories|filter(category =>
(allSelectedCategories|filter(
c => c.parent is not empty and c.parent.id == category.id
) is empty)
) %}
The problem with that is that it has quadratic complexity since for every node, we're checking every node (the fact that Twig doesn't have something like Array.prototype.some doesn't help). If your entries have many categories, this may slow down the template considerably.
We can also take advantage of the fact that category queries return their results in hierarchical order by default. So instead of checking if ANY category in the array is a child of the current one, we can just check the next category in the list. If it isn't a child of the current category, the current category in the loop is a leaf node.
{% set allSelectedCategories = entry.businessTypes.all() %}
{% set leafNodesOnly = allSelectedCategories|filter((category, index) =>
allSelectedCategories[index + 1] is not defined or
allSelectedCategories[index + 1].parent is empty or
allSelectedCategories[index + 1].parent.id != category.id
) %}
However, this approach does not work if you've changed the sort order to anything other than the default.