Why can we have small fractions of a Bitcoin?
Bitcoin amounts in the protocol and software are expressed as an integer number of "satoshis". 1 BTC is defined as 10^8 satoshis. So a block reward that is internally represented as 5*10^9 satoshis is displayed in the GUI as 50 BTC.

Splitting bitcoins to even smaller fractions will require a change in the protocol and software, and may be done when their value becomes much larger.