This just happened to me. ( Using primecoin-qt, but I expect it applies to bitcoin-qt also. ) My network went offline and I didn't realize it before I made a payment to another wallet of mine. When the network came back, the wallet synced with the network, but the status stayed 0/offline. After 10 minutes or so, I restarted the QT wallet with -rescan option. Now it says status is Unconfirmed, which suggests to me that the client thinks it has been broadcast. However, my receiving wallet does not see the transaction when I use listtransactions. and it has been at least 30 minutes now.
Fortunately I was sending a small amount, and I know I can export/import if need be... and I guess there is some chance it will fix itself with time, but I could see how this could really bite a non-technical person hard.
And it is not an uncommon situation.... really easy to get into actually.
If "cancel transaction" is not an option, then it seems to me that the client should not allow offline sending.
Or a "rebroadcast transaction" option. Or at the very least a "will retry again in 60 seconds" tip text.
Right now, the messaging is useless, and the transaction is very clearly stuck.
It is not necessary that transaction will be broadcasted at first attempt even if you press send button. Easy to reproduce. Take Satoshi client. Disconnect network. Send some bitcoins. See it appear in transaction list. It is unbroadcasted transaction. And it has same grey "?" sign as 0 conf transaction.
This behavior is client dependent. Other clients (i.e. Electrum) do not queue transactions but instead bounce it if broadcasting was unsuccessful.