Real-time clock and Crystal precision
A better crystal is one way to solve it, but it's going to cost. And even then you get maybe 10ppm, good (or bad) for 5 minutes after 1 year.  

Temperature compensated crystals are good to get a predictable stability, but they don't solve the tolerance problem; if you have a 20ppm deviation from nominal frequency, you're sure you'll always have this deviation. BTW, this is also more expensive, and I haven't seen it for 32kHz crystals.  

Software compensation is a cheap solution, and I've used it a few times. For production runs you'll have to measure the frequency and program the compensation value on a test jig.  

You can also use a trimmer capacitor for the oscillator's load capacitor.  

What I find the nicest solution, however, is to add an atomic clock receiver module (WWVB for North-America, DCF77 for Europe), and resync once a day or so. The picture shows an miniature DCF77 module from Conrad.