Currently, all USE flags are treated by Portage as "impacting" – meaning that if USE settings change for a package, Portage concludes that the package must be rebuilt to comply with these new USE settings – in other words, that the change in USE means there is going to be a change in something related to the package on your system, so it needs to be rebuilt.
However, in some rare cases, such as with the gcc ebuild, there are USE settings that are non-impacting, such as the "bootstrap" USE flag, which just tells how many stages of building to use when building. The end result is the same binary configuration. One just takes longer and does more checking.
Additionally, there are currently a lot of "abi" USE flags that unfortunately get injected into new ebuilds, and any changes to this set of flags results in a mass rebuild of your system.
There are also new python versions added as USE flags, which results in mass-rebuilds of python modules.
Nothing is actually accomplished by these rebuilds – they just satisfy portage in rebuilding packages when the set of USE flags changes. But no rebuild is actually needed.
Thus it would be nice to have a better design for USE flags in Funtoo that allow finer-grained control of rebuilds to more accurately reflect their actual impact to the package.