> > Before upgrading a package, package.el could check if the package is already
> > loaded and then force-reload it after the installation.
>
> The question is how to do the "force-reload".  Once we know how to do
> that, there are various options as to when to do this force-reload, and
> I think this is an easier problem. 

Just calling (load "file") is what I had in mind.
It's enough to redefine macros, which are the biggest issue IMO.

It won't redefine defcustom/var, but I'm not even convinced that it would
be a good idea to redefine them.