I already answered this question on StackOverflow but since old questions can no longer be migrated without undue trouble I shall reproduce my answer here.
There are two different categories of graphical objects in a Plot output.
The plotted lines of the functions (Sin[x], Cos[x]) and their styles are "hard coded" into Line objects, which Graphics can understand.
Auxiliary settings such as Axes -> True, PlotLabel -> "Sine Cosecant Plot" and AxesStyle -> Orange are understood by Graphics directly, without conversion, and therefore remain within the myplot object.
The second kind of settings can be easily changed after the fact because they are soft settings. (e.g. Show[p, (* options *)]
The first kind much be processed in some way. This is complicated by the fact that different *Plot functions output different patterns of Graphics and Plot itself may give different patterns of output depending on the input it is given.
I am not aware of any global way to restyle all plot types, and if you do such restyling often, it probably makes more sense to retain the data that is required and simply regenerate the graphic with Plot. Nevertheless, for basic uses, your method can be improved. Each function plotted creates a Line object, in the given order. Therefore, you can use something like this to completely restyle a plot:
myplot = Plot[{Cos[x], Sin[x]}, {x, 0, 2 Pi},
PlotStyle -> {{Red, Dashing[None]}, {Green, Dashing[None]}}]

newstyles = Directive @@@ {
{Green, Thickness[.02], Dashing[Tiny]},
{Thickness[Large], Red}
};
i = 1;
MapAt[# /. {__, ln__Line} :> {newstyles[[i++]], ln} &, myplot, {1, 1}]

Please note the part {1, 1} in the last line of code above. This is the part specification for the location of the Line objects within myplot. It is specified so as not to accidentally style Lines that might appears in other parts of the Graphics object. This part may need to be changed; for example when using Filling the Lines end up in {1, 2}. For this reason in the function below I simply used 1 which will be more flexible but could conceivably conflict with something.
Restyle function
The method above can be made into a self-contained function.
I will use this method to cycle the styles given.
restylePlot[plot_Graphics, styles_List, op : OptionsPattern[Graphics]] :=
Module[{x = styles}, Show[
MapAt[# /. {__, ln__Line} :> {Directive @ Last[x = RotateLeft@x], ln} &, plot, 1],
op
]]
Example:
myplot2 = Plot[Evaluate[Table[BesselJ[n, x], {n, 4}]], {x, 0, 10}, Filling -> Axis]

restylePlot[myplot2,
{
{Green, Thickness[.02], Dashing[Tiny]},
{Thickness[Large], Red},
Blue
},
Axes -> False,
Frame -> True,
FrameStyle -> Directive[20, FontColor -> Orange]
]

You will notice that the filling styles have not changed. While it is possible to change these by using GraphicsGroup in place of Line in the replacement rule the structure is considerably more complex to the point of being inconvenient. (It would probably be better to use the Graphics Inspector, or preferably to regenerate the graphic.)
Graphics Inspector
While I personally tend to avoid extensive after-Plot restyling because I like to keep everything on one place (the Plot command), and I prefer to make what changes I do with code so that there is a record of my settings without having to dig into the Graphics object, the Graphics Inspector is directly applicable.
- Double click the plot. The border should change from orange to thick gray.
- Single click one of the plot lines. (the pointed should change when you hover over an element)
- Press Ctrl+g to open the Graphics Inspector.
- Make the changes you desire, and close the Graphics Inspector.
You can now copy and paste the entire graphic, or directly assign it to a symbol: p = <graphic>
Also, see: http://www.wolfram.com/broadcast/screencasts/howtoeditmathematicagraphics/
Tangentially related:
How to change the default ColorData used in Mathematica's Plot?
Filling Styles using a single Plot in Mathematica
p = Plot[Sin[x], {x, 0, 1}]; col = Cases[p, _Hue, Infinity][[1]]; Show[p /. col -> Red]- not sure if this really merits an answer? – Yves Klett Jan 4 at 9:21Showway (to work on already existing plots), not simply aPlot[...,PlotStyle->Red]kind of solution ? – Yves Klett Jan 4 at 11:57