There are some additional bits of artistry hidden in professional paint packages though. Blending is one such thing, but the details of the brush make a huge difference too (using a texture for a brush instead of a procedural dot, for example). Then there's how the brush angles itself with respect to the stroke, whether or not the brush evolves over the course of the stroke, etc.
If you look at GIMP's options for interacting with a tablet and stylus, you can tie angle, opacity, size, etc to all sorts of things like pressure, velocity, and stylus angle. The right combinations of these will cause the result to be more useful to the artist and better allow them to use the different levels of control they have physically to control the result. One thing I haven't seen but I think would be neat is a control that basically thresholds the brush texture at an alpha value dependent on stylus pressure. So if you press lightly, you get a very spare, highly textured stroke. But if you press heavily, the stroke gets 'filled in' and becomes homogeneous except at the edges. This could be combined with a height-field of the underlying canvas to really get a painting texture going.
As far as blending modes go, you can also treat the edges of the stroke and its center differently in order to give the impression of actual material being deposited, sort of like automatically bump-mapping the result of each stroke. That will give you more of an oil-painting style effect. Or you could concentrate color around the edges, to get something like a watercolor bleed effect. Even if we're just talking pigments, you can classify a pigment by a number of optical properties and simulate how light goes down through the pigment and back up to get a very physically-realistic model.
Treat each stroke like a layer with some concentration 'w'. A given pigment might be described by absorption coefficients (Ar,Ag,Ab) and reflection coefficients (Rr,Rg,Rb). If you shine white light (1,1,1) on a patch of canvas where there's a stroke of this pigment on top of the underlying color (Cr,Cg,Cb) then the color you get out (Or,Og,Ob) is:
Or = w*Rr+Cr*(1-w*Rr)*(1-w*Ar)\\^2
with similar equations for Og and Ob. This is somewhat approximate since actually we should be considering second reflections, third reflections, etc inside of the multiple layers of paint, but this is probably good enough for many purposes. And of course, rather than using an underlying 'canvas color' you could actually store up all of the stacks of paint in each location as separate layers, but that would get computationally and memory intensive.