Although wallets indeed contain your "coins", the ability to spend them is tracked by the network. Every fully validating node keeps a list of available coins on the network. They do not know who has which, only which (Bitcoin, not IP) address (or addresses) they are associated to. In case you try to spend the same coin twice - for example because you copied your wallet to anothing computer, and then tried to send a transaction from each - you may temporarily confuse the network. Some nodes may first see the one transactions, and some others will see the others first. However, the strength of the system is that this disagreement cannot exist for long, and after some time, only one of them will be accepted.
The essential thing in your wallet is not the transactions, but the keys. Each address has an associated public and private key. These private keys never leave your wallet file, and are necessary to spend the coins assigned to your addresses.
Because the transactions are tracked by the network, you indeed don't need to be online to receive transactions. The next time you connect, your client will ask the network for up-to-date informations. During the synchronization that follows, your incoming transaction will be fetched, and the client will detect this as an incoming payment