I don't know why no one mentioned this, but all you have to do is to use a special form of `OptionsPattern`:

 pfunc[x0_, plotopts : OptionsPattern[{Plot, pfunc}]] := your-code

where inside `OptionsPattern` go all sub-functions you need, in a list. Now everything is fine and dandy.

This has been explained already in [this answer of Mr. Wizard][1], so this answer and the whole question should be considered a duplicate.

There might be a downside of this, in case when several sub-functions can take the same subset of options, while you might want to pass some of the options to some sub-functions but not the other - in which case the special `"PlotOptions"` option, as suggested by rm -rf, might be a better solution. In the simple cases, however, `OptionsPattern[{f1,f2,...}]` is IMO the way to go. 


 [1]: https://mathematica.stackexchange.com/questions/20470/function-with-custom-options-and-modified-options-for-built-in-symbols/20475#20475