From what I understand, signing a transaction offline means I don't have to ever expose my private keys to a web-connected computer. From what I've found, the only program that allows something like this with WIF keys is sx, are there any other tools that perform something like this? Or is sx the only way do accomplish this?
Armory is a popular solution for dealing with offline wallets. It is GUI based so is more user friendly than command-line / programming based solutions.
You can do this using Bitcoin Core, and it'll be even easier with Bitcoin Core 0.10's watch-only wallet support.
With the current Bitcoin Core, you create a wallet on your offline machine. Using it, you get one or more addresses (saving them, for example, to a text file). You copy those addresses to your online computer and give them to people to pay you. When you want to spend those payments, you create the transaction on the online computer in an unsigned form, copy it to your offline computer, verify it, sign it, copy the signed transaction back to the online computer, and send it.
The problem with both methods is that you need to know the TXID of any payments made to the addresses corresponding to your offline keys, and current (December 2014) versions of Bitcoin Core don't make that easy. However, the next version of Bitcoin Core (0.10.0) will include watch-only address support. So you'll take that list of addresses you generated and use the new
importadddress RPC command to add them to your wallet. The private keys will still be offline, but your online Bitcoin Core will track those addresses as if they were regular parts of the wallet. Then you'll be able to use the
listunspent RPC to get the TXIDs and vouts for incoming payments without any extra work.