If the same threshold applies to all plots, then a convenient way is to use the options `Mesh`, `MeshShading` and `GridLines`:

    With[{a = 3, b = 3, time1 = 30}, 
     Plot[a*Sqrt[x] - b*Cos[x], {x, 0, time1}, Mesh -> {{15}}, 
      PlotStyle -> Red, MeshShading -> {Opacity[1], Opacity[.5]}, 
      GridLines -> {{15}, None}, 
      GridLinesStyle -> Directive[Gray, Dashed]]]

[![enter image description here][1]][1]

You can add the options `Mesh` and `MeshShading` to `p1`, `p2` and `p3`:

    DynamicModule[{a1 = 1, a2 = 2, a = 3, b1 = 1, b2 = 2, b = 3, 
      lag1 = 26, lag = 30, time1 = 40, time2 = 36, time3 = 39}, 
     p1 = Plot[a Sqrt[x] - b Cos[x], {x, 0, time1}, Mesh -> {{15}}, 
       MeshShading -> {Opacity[1], Opacity[0.3]}]; 
     p2 = Plot[a1 Sqrt[x] - b1 Cos[x], {x, time1 - lag, time2}, 
       PlotStyle -> Red, Mesh -> {{15}}, 
       MeshShading -> {Opacity[1], Opacity[0.3]}]; 
     p3 = Plot[a2 Sqrt[x] - b2 Cos[x], {x, time2 - lag1, time3}, 
       PlotStyle -> Green, Mesh -> {{15}}, 
       MeshShading -> {Opacity[1], Opacity[0.3]}]; 
     Show[p1, p2, p3, GridLines -> {{15}, None}, 
      GridLinesStyle -> Directive[Gray, Dashed], PlotRange -> All]]

[![enter image description here][2]][2]

Note: You might want top play with `ConditionalExpression` and `Piecewise` to get all three plots using a single `Plot`.


  [1]: https://i.sstatic.net/dFLz8.png
  [2]: https://i.sstatic.net/sVBlo.png