Como você (incorretamente - o que você usou é um padrão de shell) mencionou no assunto, você deve usar expressões regulares:
find . -iregex '.*\.[ch]+'
A abordagem acima é preguiçosa, que também encontrará .ch, .hh e similares, se houver. Para correspondências exatas, você ainda precisa enumerar o que deseja, mas isso ainda é mais fácil com expressões regulares:
find . -regex '.*\.\(c\|C\|cc\|CC\|h\|H\)'