OK, thanks! It's a RTFM issue, but courier has such a lot of RTFM :-P
It might be helpful to people to note in courier(8) for hosteddomains that
locals is parsed before hosteddomains. If an address is in locals it won't
get seen in hosteddomains. This is implicit in the documentation, but
something a little more explicit would be nice. It would have saved me some
farting around trying to figure out why it wasn't working.
You should've used webadmin to set things up. webadmin knows about all
these little interdependencies...