If I have a low amount and don't include a fee, the transaction takes forever to get confirmed. What happens if it never gets confirmed? Can the wallet that I sent it to still spend the money?
Your client will have this marked as spent and will prevent you from sending any unspent coins included in the transaction while continuing to try to broadcast the original transaction. There is an easy solution, though.
You simply need to dumpprivkey and add it to another client, where you can send the coins from this address to another, effectively creating a double-spend permanently nullifying the original transaction.
Instructions on how to export and import private keys can be found here: Using dumpprivkey to make a paper backup
Additionally, blockchain.info (and mtgox) allow you to import private keys which you can spend from your web wallet.
If a transaction goes unconfirmed for too long, it will eventually disappear from the network.
Most clients will remove it from their pool of unconfirmed transactions at some point. When most clients have removed it, you can go ahead and send the transaction again, this time with a higher fee. There's not a precise time when the transaction will disappear from the network, it could be days or up to a week. This is why it's always recommended to set a transaction fee.
The wallet that you sent it to cannot spend it because it's not confirmed. So you have to wait until it disappears from the network and send an entirely new transaction.
A transaction's state is binary in regard to the current chain tip. Either it's confirmed and thus the money has changed hands, or it's unconfirmed and the money is still in the sender's wallet.
Thus if a transaction is never confirmed, the money is still the sender's. Since this question was asked, the block space demand has grown towards the block size limit, and most wallets have added support to rectify such a situation. For example Bitcoin Core added the calls
-zapwallettxes, and will now activate Opt-in RBF with the coming 0.14.0 release, Electrum has added Opt-in RBF a while back already, Bitcoin Wallet app allows you to rescan the chain and thus forget unconfirmed transactions, etc.
However, one thing that you should keep in mind is that any signed transaction is still valid until at least one of the used inputs is spent in another transaction. Should the fee levels drop too much lower levels later, your transaction could still get confirmed if anyone rebroadcasts it. Therefore, after a failed transaction, you might want to make sure that you move all involved coins once.
Also see this related question: Why is my transaction not getting confirmed and what can I do about it?
No need to worry. I made 2 consecutive transactions (real network 'mainnet') of values 0.04BTC each. The fee for these transactions were 10 Sat/kb avg.
The transaction was never confirmed and after a week, I started to work on regtest mode, I saw those transactions were removed from blockchain and the main account has all the funds.
I do appreciate blockchain, and now I play around only with regtest well before going to mainnet.
Average transaction fee can be found here https://statoshi.info/dashboard/db/fee-estimates