In our biggest residential system, he has a couple guys who maintain it full time. Then again he has a armed guards and a huge artificial lake with a waterfall that has pumps and pipes bigger around than me and a bunch of other really nice stuff.
One big part of it is not to let the customer's desires get out of hand. Be prepared to say no, or walk away, if they want to do things that you know are going to be subject to a lot of support, or want to use gear that isn't reliable or easily integrated. Stick to things that you know from experience are workable and safe.
Ultimately, though it's really hard to do, the goal I think would be to create a standard package (or perhaps a small set of tiers of them) that you can modify per installation, and charge big bucks if they want something that cannot be approached in that way. That way you are starting from a known place, and saving a lot of work.
It's hard both because, well it's just hard, and also because you get into the 'who owns the code' thing. If every system is a completely custom system, then who cares. The customer paid for it, so let him own it. But if you want to be efficient and reuse standard stuff that you have put a lot of work into and which is now a basis of your ability to deliver value, how do you deal with that? It's not like selling a commercial application where it's obvious that you are only buying the right to use it, not the right to the code.