Simply put, a "hidden" structure is a structure that you have a declaration for but no definition. In the case where an API provides this type of structure, this means that you shouldn't have to worry about what the internals of the structure look like. Giving you the declaration provides enough information so that you can create pointers to that structure type, which is usually sufficient when using the associated API.
In your case, the internals of the API probably have a definition that looks like this:
struct allegro_bitmap {
/* Insert mystery internals here */
};
#define ALLEGRO_BITMAP struct allegro_bitmap
Somewhere in one of the headers that you are given, you have only a simple declaration:
struct allegro_bitmap;
#define ALLEGRO_BITMAP struct allegro_bitmap
This is enough information for the compiler and linker to build your code and link it to the associated library. In order to do anything useful with the pointer, you have to use the API functions (since they have the full definition of the structure).