Here is what I have done; maybe this is useful for someone. My starting point was OpenWRT White Russian RC3, which has been running smoothly on my router for years.
1. Make /etc/ipkg.conf writeable:
cp ipkg.conf ipkg.conf.rw
mv ipkg.conf.rw ipkg.conf
2. Add to /etc/ipkg.conf:
src xwrt ftp://ftp.berlios.de/pub/xwrt/packages
3. ipkg update
4. ipkg install dnsmasq
This asks whether you want to install the new package's dnsmasq.conf or keep your own one. Unlike dpkg, ipkg doesn't give the option to show the differences. So you might like to think ahead and make a copy of your dnsmasq.conf first. I kept my old file because it had some customisations and I don't know what differences, if any, there are in the new default.
5. Make sure you have something like this in /etc/dnsmasq.conf:
(i think this location may have been the default in a previous version; the default in this version seems to be somewhere in /var, which doesn't exist.)
6. Check if you have ipcalc.sh somewhere (my guess is that it's in the base-files of newer versions of White Russian, but I don't seem to have it in my RC3). Note that this isn't the same as ipcalc (without the .sh) which is part of busybox. If not, modify /etc/init.d/S60dnsmasq so that it doesn't use it; for example, follow the file's advice to put all the configuration in /etc/dnsmasq.conf and replace the file with a simple call to dnsmasq.
6. Cross fingers and reboot. (For some reason it didn't work for me until I power-cycled.)
I hope that's useful to someone. It's unfortunate that it's so complex though.