I'm not sure I understand what you mean by the nested loops being a problem. The basic structure is as follows:
Property step
Primary Datasource (All records in table)
... Groovy script to reset property in property step
... Secondary Datasource (lookup specific pieces of data elsewhere) [skips to secondary loop step on no records]
... ... Groovy script to append 1 value to property as a properly formatted xml string
... Loop 0..* on Secondary Datasource
... Issue Soap Request (involving data from the primary datasource and the appended property)
Loop on Primary Datasource
I'm not sure how I could separate the inner loop since it's datasource is dependent on the data obtained from the primary loop. Additionally since there are an unknown number of records returned from the secondary loop, I can't just flatten the datasources together into one larger query.