The size of data types does not automatically double with x64, but the size of the processors registers, just as the pointer size does. With 32 bits you are able to address 4294967295 bytes of memory (~ 4 Gb), which is not enought for some applications (like database management systems, ...).
Firefox is only available in 32-bit, because of compatibility issues. You cannot write libraries for x86 (32 bit) architectures and call them from x64 processors, because their pointers are incompatible (as described above). Creating both: x64 and x86 versions increases test-expense. If your application rarely uses more than 3.5 Gb memory, then it doesn't actually profit from x64 architectures.
Also 32 bit programms cannot simply run on x64 architectures. On Windows there is a layer for this, called Windows on Windows (WoW), or WoW64 for x64/x86 interfaces. Through various caching cases it may also be that an x86 application runs actually faster on WoW, than an native x64 application, doing the same.