Use HLD when you need path queries or updates on a tree, and subtree queries do not work because paths cross subtree boundaries. Use it when you cannot afford per query. HLD reduces path operations to . If you need per query with no updates, use binary lifting with sparse tables instead.
HLD is the standard choice when you need both path queries and updates. It is more complex to implement than subtree queries but handles a wider range of problems.