Duplicate mapped elements in Riffle

l1 = {a, b, c};
l2 = {d, {e, f}, g};

Partition[Flatten[Thread /@ Thread[{l1, l2}]], 2]

{{a, d}, {b, e}, {b, f}, {c, g}}

or

(## & @@ Thread @ #) & /@ Thread[{l1, l2}]

{{a, d}, {b, e}, {b, f}, {c, g}}


Using undocumented Function syntax, Listable, and v10 Composition syntax:

fn1 = #[[2, 1]] & @* Reap @* Function[, Sow[{##}], Listable];

fn1[{a, b, c}, {d, {e, f}, g}]
{{a, d}, {b, e}, {b, f}, {c, g}}

This works at deeper levels as well:

fn1[{a, b, c}, {d, {{e1, e2}, f}, g}]
{{a, d}, {b, e1}, {b, e2}, {b, f}, {c, g}}

Another method without the undocumented functionality:

With[{h = Unique["h", Listable]},
  fn2 = Cases[h[##], h[e__] :> {e}, -1] &
]

Test:

fn2[{a, b, c}, {d, {{e1, e2}, f}, g}]
{{a, d}, {b, e1}, {b, e2}, {b, f}, {c, g}}

One way:

ff = Flatten[#, 1] &; 
ff@MapThread[Function[{u, v}, {u, #} & /@ ff[{v}]], {{a, b, c}, {x, {y, u}, z}}]

(* {{a, x}, {b, y}, {b, u}, {c, z}}*)