To get the fine control over the graphics, I would one probably has to construct each element and combine them.  As [@Silvia](http://mathematica.stackexchange.com/users/17/silvia) points out, exclusions cause separate polygons to be created.  When rendered on a discrete screen, these may overlap or have gaps.

That means drawing the step curve and its filling separately, like this:

    Plot[Sign[Sin[x]] Ceiling[Abs[Sin[x]], 1/3], {x, -2 Pi, 2 Pi}, 
      PlotStyle -> Red],
    Plot[Sign[Sin[x]] Ceiling[Abs[Sin[x]], 1/3], {x, -2 Pi, 2 Pi}, 
      PlotStyle -> None, Filling -> Axis,
      FillingStyle -> Directive[Opacity[0.2], Red], Exclusions -> None]

If you don't want to copy, paste, and edit each step function plot, you could write a function to combine both plots, such as the following:

    SetAttributes[plotWithFilling, HoldAll];
    plotWithFilling[Plot[f_, x_, opts___], col_] :=
      Show[
       Plot[f, x, PlotStyle -> col, opts],
       Plot[f, x, PlotStyle -> None, Filling -> Axis, 
        FillingStyle -> Directive[Opacity[0.2], col], Exclusions -> None, opts]];

Usage:

    Show[
     Plot[Sin[x], {x, -2 Pi, 2 Pi}, PlotStyle -> Blue],
     plotWithFilling[
      Plot[Sign[Sin[x]] Ceiling[Abs[Sin[x]], 1/3], {x, -2 Pi, 2 Pi}],
      Red
      ],
     plotWithFilling[
      Plot[Sign[Sin[x]] Floor[Abs[Sin[x]], 1/3], {x, -2 Pi, 2 Pi}],
      Green
      ],
     AspectRatio -> 1/Pi, Frame -> False]

![Mathematica graphics](https://i.sstatic.net/GxEaZ.png)