Only functions that are "plots"
Information["*Plot" | "*Plot3D"]
can take the options that has word "plot" in them
Information["Plot*"]
So you should put your PlotStyle in NumberLinePlot, and only then use Show. But why if you can put everything in NumberLinePlot? I guess you got your reasons, but the truth is Show cannot take PlotStyle.
numLinePlot=NumberLinePlot[
{Interval[{0,2}],Interval[{2,4}],Interval[{0,4}]},
PlotStyle->{
Directive[AbsoluteThickness[3],AbsolutePointSize[4],Blue],
Directive[AbsoluteThickness[3],AbsolutePointSize[4],Yellow],
Directive[AbsoluteThickness[3],AbsolutePointSize[4],Red]},
Ticks->{{0,2,4},Automatic},
ImageSize->450]