the WOW64 layer simply isolates the 32bit applications in their own 32bit virtual memory space, Unlike Itanium, which has to run an emulator to run X86 code, X64 processors can run X86 code natively. All data is stored as 32bits for these 32bit applications.
All the historical registers in the X86 processor are still available for use in 64bit mode, AL/AH (8 bit pairs), AX (16bit), EAX(32bit), and RAX(64bit). Apparently some instructions are unavailable in 64bit mode, but Im pretty sure that if can still make use of the smaller registers if need. And if you pop 8 bits from AL into a memory location, it should still be 8 bits when its stored.
The transition from 16bit to 32bit certainly kept the ability to store numbers in both 8 and 16bit formats. Im pretty sure that its possible with 64 bit as well, and its certainly true with 32bit applications running under the WOW layer (has to be, the applications themselves are coded with 32bit address boundarys). If the WOW layer was "converting" 64bit data and addresses into 32bit on the fly it would have a much larger performance hit. All it does is say AHH 32bit application, assign a 32bit virtual memory pool. (remember that complied languages end up machine code, and machine code will work with specific bit offsets. If the hardware/os suddenlty changed the data storage, the application would likely keep grabbing the wrong memory locations)
It's all down to the programmers at the end of the day, and what needs they have. If a program requires data that wont fit into a 32bit register, then obviously they have to store that data as 64bits. It wont matter if the result of the calulation is 1 or 1 billion, it would still take all 64bits. Also depends on what languages are used, how variables are defigned etc etc etc.
If you code in C, you can use the following data types when you define a variable, and they can be signed or unsigned integers.
8-bit: int8_t uint8_t
16-bit: int16_t uint16_t
32-bit: int32_t uint32_t
64-bit: int64_t uint64_t
If you know your code NEVER needs integers larger than 256 (and no negatives) you can still use an 8 bit unsigned integer for example.
At the end of the day it simply depends how much care was put into developing the software in the first place. Its always possible (though lazy) to pick the largest integers for everything, and simply "up the memory requirements"
In other languages int's often default to 32bit, with longints available for 64bit. However outside the "WOW" layer, a true 64bit application pointers will generally be 64bit, but data can still be stored in smaller variables, and will be stored in memory accordingly.