I'm guessing this hypothetical API is h2m, and quite close to the surface, i.e. the user interface, since a) you talk about the user and b) if it was an m2m API, and the client was a machine, then it probably couldn't care less about what was unavailable (or why).
And it sounds like you want the UI that sits over your API to display *all choices*, but grey out the ones that are not currently available? i.e. like a good old Windows menu?
And furthermore you want to allow the user to be able to easily suss out why their desired menu item is unavailable - perhaps via a tooltip or similar?
It sounds that what you want is almost an anti-pattern for HATEOAS, where all future actions the client may take (not "might ever take") are discovered within resource representations returned from the server.
Possible approach
Can you somehow (other than from the hypermedia response) get a list of the superset of actions for the resource? e.g.: for your forum resource, the superset might be:
"comment"
"delete"
"close"
"admin"
"stats"
Maybe you could pull this list from your hypermedia-savvy design tool?
Then you use this list, not the hypermedia controls, to render the menu, leaving all items disabled.
Once the menu is created, run over it again and enable only those items that appear in the hypermedia response.
That would solve one part of your problem, i.e. showing users the options that are not available as well as those that are.
As to the other part, explaining exactly why menu item A is disabled rather than enabled, you might want to handle that some other way, and on demand only.
It could be quite expensive calculating that sort of information, especially if (as some people believe), typical user behaviour is just to shrug at the disabled menu item and move on. You probably don't want to take the performance hit every time just in case some user wonders why menu item XY2 is unavailable.