It depends on how you want to fill in the missing data. But first we need to determine what you're actually wanting. When you said:
form a list of pair {xi,yi}
I assumed that you want something like Thread, meaning that elements with the same index get paired up. But I see Hans' answer using Outer, which will do all pairs. So, which do you want (before applying the function F)?
L1 = {x1, x2};
L2 = {y1, y2, y3};
possibleResult1 = {{x1, y1}, {x2, y2}, {y3}}
possibleResult2 = {{x1, y1}, {x2, y2}, {padding, y3}} (* where we need to figure out what padding to use *)
possibleResult3 = {{x1, y1}, {x1, y2}, {x1, y3}, {x2, y1}, {x2, y2}, {x2, y3}}
Or do you want something else entirely?
In the meantime...
(* possiblity #1 *)
F /@ Flatten[{L1, L2}, {2}]
(* {F[{x1, y1}], F[{x2, y2}], F[{y3}]} *)
F @@@ Flatten[{L1, L2}, {2}]
(* {F[x1, y1], F[x2, y2], F[y3]} *)
(* Need to decide what to do with the dangling F[y3] or F[{y3}] *)
(* possibility #2 *)
F /@ Transpose[PadRight[{L1, L2}]]
(* {F[{x1, y1}], F[{x2, y2}], F[{0, y3}]} *)
F @@@ Transpose[PadRight[{L1, L2}]]
(* {F[x1, y1], F[x2, y2], F[0, y3]} *)
(* This assumes that 0 is an appropriate default. Different default can be specified. *)
(* possibility #3 *)
F /@ Tuples[{L1, L2}]
(* {F[{x1, y1}], F[{x1, y2}], F[{x1, y3}], F[{x2, y1}], F[{x2, y2}], F[{x2, y3}]} *)
F @@@ Tuples[{L1, L2}]
(* {F[x1, y1], F[x1, y2], F[x1, y3], F[x2, y1], F[x2, y2], F[x2, y3]} *)
Or, of course, Hans` answer provides another option.