I'd suggest reading these couple articles to understand more about the "how they work" and "how they're designed" aspects:
When react executes your component function, it will initialize a context (a big array) and each hook will be linked to an index in this context.
So, while being nearly pure, we can describe side effect but only for the provided context.