Sure! But it would really help to know what you want to do with these plot expressions in your function. Each plot function could have different options or different argument patterns, so if you're inspecting the expression inside your function, you probably can't avoid some special-casing.
Anyway, the function MyPlotWrapper
that I showed you has "knowledge" of all the parts of the plot expression, so you can just assemble the pieces together when you're ready to execute the plot. Or, you can just name the whole argument pattern, and avoid having to reassemble the pieces.
SetAttributes[MyPlotWrapper, HoldFirst];
MyPlotWrapper[p_[fns_, range_, options___]] :=
Column[
{"head: " <> ToString[p],
"function(s): " <> ToString[fns],
"range: " <> ToString[range],
"options: " <> ToString[{options}],
Row[{"the plot", p[fns, range, options]}]}]
Or
SetAttributes[MyPlotWrapper, HoldFirst];
MyPlotWrapper[expr : p_[fns_, range_, options___]] :=
Column[
{"head: " <> ToString[p],
"function(s): " <> ToString[fns],
"range: " <> ToString[range],
"options: " <> ToString[{options}],
Row[{"the plot", expr}]}]