first and foremost I never read the bitcoin source code (I can't read any C) and I was wondering if Bitcoin, and any other crypto currency follow that they have data limits such as a maximum value of a long int is 4,294,967,295. If that case is true what would happen when the difficulty goes above the long int value. Hopefully this makes sense in how I worded it.
Of course they make use of these datatypes. They have to because it is how the CPU is constructed, the CPU and its instruction set architecture (ISA) work with fixed amounts of memory. This can be different per instruction, but can not be arbitrary.
If you need to perform arithmetic on arbitrary sized words, your only option is a software approach called a BigNum library. Bitcoin uses a BigNum library too (I believe some Boost stuff, but correct if I'm wrong). Examples include but are not limited to: GMP, Java's BigInterger class.
The difficulty is determined by a 256 bit target. Miners must find a hash for the block that is below this target. The target decreases or increases to adapt to the desired block time (10 minutes in the case of Bitcoin).
Pools usually calculate difficulty as a float for their stats because it doesn't need to be very precise. The actual difficulty is determined by the 256 bit target.