Woohoo. 1st iterative macro!
I set this one aside after trying it about a month ago, when I first started Alteryx. While I've developed many recursive solutions in my time, they were always in procedural languages. This is the first one I've tried in a declarative language. I had trouble mapping the looping,data set reduction and stop conditions that I was familiar with to their Alteryx equivalents.
A little patience and a lot of practice and I know how many wheel washers go on a car!
Solution attached. I took the macro approach as this seemed like the real-life approach to a real-life problem. I was interested to see if any of the standard workflow approaches accomplished a flexible (i.e. variable number of levels), recursive join. The solutions using multiple Join tools appeared to be hard-coded to four levels. Other solutions appeared to assume that the Line Id had intelligence were always in a particular order, and possibly that a single part did not appear in multiple BOMs. The solution from @patrick_digan appears to accomplish a flexible, recursive join, but it was very hard to follow and I'm not sure the concatenated List field could handle any volume of BOMs. I would be interested to know if a standard SQL recursive query can be accomplished in a standard Alteryx workflow.