One idea would be to be more aggressive about down-sampling when using fillPlotter. For linePlotter, we plot a pixel if it changes the x- or y-coordinate. For fillPlotter, we need only plot the max value for each x-coordinate.
Looking more deeply at fillPlotter, I'm slightly horrified at how it draws.
Here's how you might expect a filled graph to be drawn (from the bottom left point):
You start on the axis, draw the chart line across the top, then drop down to the axis and close.
Now here's how dygraphs draws it (I've dropped the fill for clarity):
For each pair of next/prev points, dygraphs moves to the left x-value on the x-axis. Then it draws a line to the right point on the x-axis. Then it draws a line up to the chart line. Then it draws a line back to the previous point on the chart. On the next iteration through, it moves to the next point on the x-axis.
This is crazy. It involves far more lines than is necessary and it thwarts attempts to drop unnecessary lineTos that don't move very far.