Looking at the changes which can make the issue go away (d) looks to be the most promising for a solution at the C level. I.e. to have the canvas automatically split poly-lines with more than 20 segments into multiple lines each using less than 20 segments.

The only issue I can see with this would be the handling of a non-"round" join-style, i.e. "bevel" and "miter", at the split-points. I wonder if this do-able by using cap-style "butt" for the segment-end at the split, plus an overlapping segment which draws that join correct over the split-point.

I.e. instead of drawing the split as

*--- ... ---*
            *-----*--- ... ---*

use

*--- ... ---*-----|
            |-----*--- ... ---*

Of course, I am getting ahead here.

Have you continued to test (d) ?

Reading the description again you are also saying it happens only when going outside the visible area ?!

Then having Tk clipping the line to the area and removing the invisible pieces also helps ?!

That would then actually be the better solution, IMHO.