Eli,
I can implement the functions for Windows and OSX. I believe all Unices have implemented the XDG Base Directory Specification.
But we do have a problem: once this is implemented for all operating systems, XDG will become a meaningless package name and prefix. Maybe we should not have a prefix at all and find sensible names not used by Emacs at the moment.
I propose that xdg-config-dir becomes instead user-emacs-config-directory and gets to be initialised according to the operating system's best practices. Defaulting to ~/.emacs.d/config. user-emacs-cache-directory defaults to ~/.emacs.d/cache and user-emacs-data-directory to ~/.emacs.d/data. The defaults would only be used iff the operating system determination functions return nil.
user-emacs-directory could either be an alias of user-emacs-data-directory or default to it.