data = {{1, 2, 3}, {4, 5, 6}};
labels = {aaa, bbb, ccc, ddd, eee, fff};
labeleddata = TakeList[MapIndexed[Labeled[#, labels[[#2[[1]]]]] &,
Flatten @ data], Length /@ data]
BarChart[labeleddata, ChartStyle -> {{Red, Green}, None}]

You can also define labeleddata
as
labeleddata = MapThread[Labeled] /@ Transpose[{data, TakeList[labels, Length /@ data]}]
Update: An alternative approach using the option LabelingFunction
:
ClearAll[labelingF]
labelingF[data_, labels_] :=
Association[
Flatten@MapIndexed[#2 -> # &, TakeList[labels, Length /@ data], {2}]]
Examples:
data = {{1, 2, 3}, {4, 5, 6, 7, 8}};
labels = {aaa, bbb, ccc, ddd, eee, fff, ggg, hhh};
BarChart[data, ChartStyle -> {{Red, Green}, None},
LabelingFunction -> (Placed[Rotate[#, 60 Degree] &@labelingF[data, labels]@#2, Below] &)]

Use data = {{1, 2, 3}, {4, 5, 6}, {7, 8}}
and ChartStyle -> {{Red, Green, Orange}, None}
to get
