Last night, I wiped out all of the Membership and Role stuff and rolled my own. In about three hours, it was all gone, I eliminated hundreds of lines of code (and many tests), removed the data constraints I was talking about and generally made myself a happy boy. I feel liberated.
My first design goal in this project has always been to efficiently facilitate community discussion. Somewhere along the line, I got lost and distracted worrying too much about what some programmer down the road might want to do with the code. That was a mistake. And I should know better too, since most forums out there aren't integrated with other site functions. Those that are have people clever enough to deal with the situation.
The lesson learned here is that trying so hard to offer the flexibility of shoehorning my application into a familiar API caused more constraints than provided flexibility. I was putting up roadblocks trying to solve problems that didn't need to exist in the first place.
Simplicity really is better. It frees you to build stuff faster. It was a neat idea, but seeing as how several of my own forthcoming projects rely on a rewritten forum app, this was a path not worth pursuing. I need to ship something.
For those that need Membership in a forum, I'm pretty sure Community Server uses it, so there is an option.