You're evaluating an expression, implicitly or otherwise, as you produce the correct value; you need only keep a second expression which contains the derivative. More math than circuits, at least(?). I'd have to scratch on some paper to see what the correct formula is (per stage or holistically).
Important note: tolerance is the derivative divided by the nominal value, hence unitless. The derivative doesn't change for resistors in series, but the tolerance does.
There's also the issue of dependent versus independent; all the derivative contributions need to be summed as RMS, not just added. And all resistors need to be assumed as independent, so you can't just push in the same derivative and have it come out right (which would give the same total tolerance as rated, which is intuitively wrong).
Worst case max/min might be interesting too, but probably not very useful.
By the way, what method are you using to generate networks? If it's straight approximation (add until high enough, parallel until low enough, repeat until within spec), it's guaranteed to terminate but not to be optimal. Not sure what would do that, exactly. Probably a tree search starting from the final value (which is either composed of series or parallel, which are composed of...), and finding the path of descent along that tree which gives all values within tolerance. Hmm, that still might not be very fast, there's no obvious way to choose a unique path.
Tim