Think of the else clause as being part of the loop construct; break breaks out of the loop construct entirely, and thus skips the else clause.
But really, my mental mapping is simply that it's the 'structured' version of the pattern C/C++ pattern:
for (...) {
...
if (test) { goto done; }
...
}
...
done:
...
So when I encounter for...else or write it myself, rather than understand it directly, I mentally translate it into the above understanding of the pattern and then work out which parts of the python syntax map to which parts of the pattern.
(I put 'structured' in scare quotes because the difference is not whether the code is structured or unstructured, but merely whether there are keywords and grammar dedicated to the particular structure)