What methods, practices and conventions do you know of to modularize C code as a project grows in size?
OO techniques can be applied to C code, they just require more discipline.
stdio
library -- everything is organised around the opaque FILE*
handle. Many successful libraries are organised around this principle (e.g. zlib, apr)struct
s are implicitly public
in C, you need a convention + programmer discipline to enforce the useful technique of information hiding. Pick a simple, automatically checkable convention such as "private members end with '_'".