While you might find information about one hidden primitive or another scattered about the web, we don’t attempt to actively maintain any documentation about hidden primitives. They primarily exist for the development team to use in automated and non-automated testing of the software, and in debugging niche issues.
When new instances of hidden primitives do get implemented (which has been incredibly rare, in the last decade), they are not subjected to the usual amount of internal design discussion that is appropriate for adding a public-facing primitive to the language. We might realize later that we want to rename the primitive, change its arguments in a way that would break any model using the primitive, or remove it altogether if it’s complicating the code without offering too much benefit. In short: Things are kept hidden unless they need to be public, so we can freely break the original implementation.
Sometimes, people ask for things that we already have implemented as hidden primitives, and we can just suggest to them to use the hidden primitive (see here for an example). If enough people ask about this sort of thing, or we otherwise determine that the primitive is actually useful to the wider audience of NetLogo users, we might eventually promote it to become a full primitive (like what happened with set-topology).