Riffle plus Append to ListPlot data of different lengths

How about

MapThread[Thread[{#1, #2}] &, {x, a}] // Flatten[#, 1] &
(* {{x1, 1}, {x2, 1}, {x3, 1}, {x3, 2}, {x4, 1}, {x4, 2}} *)

thread0 = Inner[Thread @* List, ##, Join] &;

thread0[x, a]
{{x1, 1}, {x2, 1}, {x3, 1}, {x3, 2}, {x4, 1}, {x4, 2}}
t = {1, 3, 5, 15};

ListLinePlot[thread0[t, a]]

enter image description here

You can also use:

thread1 = Catenate @* Map[Thread] @* Thread @* List;

thread1[x, a]
 {{x1, 1}, {x2, 1}, {x3, 1}, {x3, 2}, {x4, 1}, {x4, 2}}

and

thread2 = MapThread[Apply[Sequence] @* Thread @* List];

thread2[{x, a}]
 {{x1, 1}, {x2, 1}, {x3, 1}, {x3, 2}, {x4, 1}, {x4, 2}}

Using Splice that was newly introduced in version 12.1:

Splice@*Thread /@ Transpose[{x, a}]

(* {{x1, 1}, {x2, 1}, {x3, 1}, {x3, 2}, {x4, 1}, {x4, 2}} *)