Recently had the fun experience of merging two C codebases at work and in the process implemented a sort of encapsulation and split high-level vs low-level control/logic. It's probably not the greatest implementation of these designs, but for a hand-rolled design, I'm pretty happy it works as well as it does.
Might have to look at setting aside time to write something up I can share. If y'all happen to know any good references for this sort of thing, I'm interested.