I've thought some about this in the past, too. Coming from Matlab, I've imagined a Matlab-esque Base.Plots module that has just a handful of definitions, mirroring the IO system:
abstract AbstractPlot
immutable NoPlots <: AbstractPlot end
STDPLOT = NoPlots() # When a plotting package loads, it assigns its own AbstractPlot object to STDPLOT
line(args...) = line(STDPLOT, args...)
line(p::AbstractPlot, ys::AbstractArray) = line(p, 1:size(ys,1), ys)
# Then each plotting package would specialize on the following method:
line(::NoPlots, xs, ys) = error("Plotting requires a plotting package to be installed. Here, try one of these: …")
# … and so on for just a handful of very common (and specific!) names …
scatter() …
bar() …
surface() …
Of course, doing anything more complicated would require delving into documentation and using a more package-specific function. But users could easily start from the source for these simple prototypes and grow from there. Sure, this will be heretical for some plotting packages, but I think there's value here, especially for quick and dirty exploratory data analysis.
The plot function is tougher — there's not really a meaning to it beyond "show this thing graphically," and packages use keywords or other arguments to determine the kind of plot. I could see it being useful in cases like yours, though, where you want to define a plotting routine for a your own ROC object type. You would simply define `plot(p::AbstractPlot, t::ROCType)` and then use the above primitives. The trouble is, as a package author, you'll want to add fancier features like labels, legends, colors, titles, bounds, error-bars, shaded regions, transforms, etc…. and now we're marching down that crazy never-ending path Daniel fears.
So: yes, it's possible. Is it useful? I'm not so sure. I think no matter what you're going to have to learn a specific plotting API, and as a package author I think you're better off picking one to support well and extending its functions directly. Maybe some cavalier users will come by and add support for others they like with lazy loading through Requires.jl. :)
Matt