After a bit of style sheet spelunking I believe I have a solution. It is far from well tested at this point but I'm encouraged.
One reads in Core.nb under the FormatType Styles section:
The cells below define styles that are mixed in with the styles of most cells. If a cell's FormatType matches the name of one of the styles defined below, then that style is applied between the cell's style and its own options. This is particularly true of Input and Output.
From this it becomes clear why the styles one creates for Input and Output are not respected. That leads me to my proposed method. The template for the private style sheet is as follows:

The code for the top cell, placed above the base style sheet cell, is:
Cell[StyleData["StandardForm"],
FontFamily -> Inherited
]
This changes the way that the "Input" and "Output" styles work. Now you create font style cells for both, e.g.:
Cell[StyleData["Input"],
FontFamily -> "Courier"
]
Cell[StyleData["Output"],
FontFamily -> "Trajan Pro"
]
And prestidigitonium!

StandardForm, but that changes bothInputandOutput. Is there no way to change justOutput? (And what's theOutputstyle for if it has no effect on output?) – raxacoricofallapatorius Nov 13 '12 at 22:24Core.nbdefinesDefaultFormatType -> DefaultOutputFormatTypefor the output style and this is theStandardForm. You can setDefaultFormatTypeto some other *Form and change that instead, because modifyingStandardFormwill also change the input sytle. – rm -rf♦ Nov 13 '12 at 23:18StandardFormto effect change in"Output"(and"Input") before; that is what I am dissatisfied with. Sorry for unintentionally disparaging your answer! – Mr.Wizard♦ Nov 14 '12 at 0:05