Solaris "solved" the 32 / 64 bit issue the same way OS X did: a 64 bit kernel with an entirely 32 bit userland. OS X doesn't do this anymore but OpenSolaris did for quite a while. I haven't checked if this is still the case in the most recent OpenIndianas. So the seamlessness that you are referring to is simply a matter of adopting one as opposed to the other. This also limits the total address space for any given process to be the 4 GB limit. This can be problematic for something like a CAD or 3D rendering package, in which consuming 5 or 6 GB even with just memory mapped IO is the norm.
And for what it's worth, all the people saying that chrome is 32 bit only, that is likely the case only for windows:
file /usr/lib64/chromium-browser/chrome /usr/lib64/chromium-browser/chrome: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, stripped
Even with all of the asm included in the chromium source code it can still be built cleanly as 64 bit. Of course the same can be said about the Linux versions of Firefox, I suppose. I too am baffled why 64 bit windows support is this complicated. When developing for Windows I find all sorts of weirdness between their 64 bit and 32 bit compilers. I found the 64 bit C compiler strict about where declaring string buffers (had to be at the beginning or it wouldn't compile). The 32 bit compiler of the same version of Visual C compiled and ran the code just fine.