Here is an expressly iterative solution:
bf[f_, x_] := ((f~Scan~#; #~Level~{2})& ~FixedPoint~ {x};) (* In[2]:= bf[Print, {{1, {2, 3}}, {4, 5}}] {{1,{2,3}},{4,5}} {1,{2,3}} {4,5} 1 {2,3} 4 5 2 3 *) Incorporating Rojo's advice to Hold expressions gathered by Level:
bf[f_, x_] := ( Level[f~Scan~#; #, {2}, Hold] & ~FixedPoint~ {x} ;)