The clshow parameter for prop=categories seems to consider all categories as being not hidden, or else the API's definition of "hidden" isn't what is shown as "Hidden categories" at the bottom of the article page. For example, the following query should return at least one category for every page returned since it is querying the categories of pages in a hidden category:
However, at least in revision r40356, no categories are returned. All the categories, even the hidden one, are returned when !hidden is requested:
I notice that OutputPage.php does the "hidden category" thing in a completely different way.