The GCC documentation has a very clear example for stack reuse:
int *p;
{
int local1;
p = &local1;
local1 = 10;
...
} // local1 lifetime is over, but p still points to local1
{
int local2;
local2 = 20;
...
} // local2 might reuse local1 space
if (*p == 10) // out of scope use of local1
{
...
}
So, the option basically means if each local variable has a dedicated stack space. If option is used (default), local variables with non-overlapping lifetimes might use the same stack space (as variables local1 and local2 in the example above.
It is just for the local variables and temporaries, it has nothing to do with stack clean-up.
The stack clean-up is happening always after return and regardless of the -fstack-reuse option. But due to the option, we might need to allocate (and clean-up after return) more space on stack for the same number of local variables.