The first thing that came to mind:
list1 = {a1, a2, a3, a4, a5};
list2 = {{b1, c1}, {b2, c2}, {b3, c3}, {b4, c4}, {b5, c5}};
Rest@FoldList[Append, {}, Most@list1]
Rest[list1] / %
Flatten /@ Thread @ {Take[list2, Length@#], #} & /@ % (* not too pretty *)
{{a2/a1}, {a3/a1, a3/a2}, {a4/a1, a4/a2, a4/a3}, {a5/a1, a5/a2, a5/a3, a5/a4}} {{{b1, c1, a2/a1}}, {{b1, c1, a3/a1}, {b2, c2, a3/a2}}, {{b1, c1, a4/a1}, {b2, c2, a4/a2}, {b3, c3, a4/a3}}, {{b1, c1, a5/a1}, {b2, c2, a5/a2}, {b3, c3, a5/a3}, {b4, c4, a5/a4}}}
I am still thinking about a clean way to perform the second step.