After some forum searching, I found the Roam Override widget on Google Play. Wonder of wonders, it was actually written specifically for the Optimus S. It lets you cycle between home carrier (Sprint for me) only, automatic roaming (the way the phone normally works), and always roam. It's working well so far. I've forced roaming and now can successfully make and receive calls and send and receive texts. Haven't tried data, but there's not really any need, since I'm connected to my home wireless router for internet access.
Calling Sprint every couple of days now to try to escalate a fix. I get 5 bars once I'm about 4 or 5 miles from the house, but nothing at home. I've lived here about 10 years and always had a good signal, so I'm still convinced it's a network problem, not just an ongoing lack of coverage.