Do it all in the software!, I don't quite understand what a multiplexer has to do with it though? (unless you are multiplexing an LED display at the same time?). Use an R2R DAC (taking 8 PIC pins), generate the ramp in software and output it through the DAC - this will give you a 5V ramp (with 256 steps), use an op-amp to amplify this by 2, to give you the 10V ramp.
To make a smaller ramp, simply don't use all the steps, only 128 steps would give you a 5V ramp, and so on. You will also need to alter the time between steps to keep the frequency the same. As you only have 10 different output levels, you could easily use a lookup table for the different step delays. The application itself wouldn't appear to be at all critical about waveshape, so a simple stepped ramp should be fine.
If you run short of pins, there are many different options, simple TTL port expanders are one, or various kinds of latches - but probably easiest is to use a different PIC. The 16F628 (the replacement for the 16F84) gives you 16 I/O pins in the same 18 pin footprint, or an 16F876 will give you even more at the expense of a 28 pin footprint. Or you could simple add a second PIC, even using the same clock oscillator, and transfer data from one to the other over a single pin - use one to read the buttons and drive the display (if any), and the second to generate the ramp.