The whole lnext() stuff all feels a bit old now that Lists are arrays. I think we'd be better adjusting the code to pass the List index where we start from rather than the ListCell to start from. That way we can use for_each_from() to iterate rather than for_each_cell(). What's there today feels a bit crufty and there's some element of danger that the given ListCell does not even belong to the given List.
I think we can go even further to do the same for 'bushy plans' case, like the attached.