Hacking manually in the wallet.dat is totally acceptable. (I assume I'd need some sort of BDB CLI client)
I found it nearly impossible to get some invalid transactions out of my wallet. Though, I didn't try pywallet...
If the wallet was created with a version of the client before 0.6.0, you can import the entire Satoshi wallet into Armory (Wallets->Migrate Bitcoin Wallet). From there, you can sweep the relevant addresses or move the coins out from under those invalid Tx. Once the tx hits the blockchain, go back to the original client which will see those tx as actually invalid and will complaining (well, it should)