TL; DR : o fluxo de trabalho do seu git não é realmente o problema. O problema é que você precisa de mais iterações menores nos recursos que você coloca em suas ramificações tópicas. Isso reduzirá a dor de manter esses ramos tópicos atualizados e integrá-los ao upstream.
Você definitivamente deseja manter os branches desimpedidos atualizados com as alterações em seus upstream, e a rebasing geralmente é a maneira correta de fazer isso.
Seu comentário de que "às vezes um recurso é maior do que o que um ramo deve ter" me leva a acreditar que você tem ramificações tópicas de longa duração que você acha difícil de integrar ao seu ramo de integração. Isso, na minha experiência, é a raiz real da sua dor.
Imagine se suas ramificações tópicas durassem algumas horas e depois fossem mescladas de volta ao ramo de integração. Essas ramificações efêmeras provavelmente serão triviais para se manterem atualizadas e triviais para serem mescladas em sua ramificação de integração. Por outro lado, imagine uma ramificação tópica de longa duração que abrange várias versões do software sem integração. Provavelmente seria muito difícil de integrar. Isso deve levar você a concluir que os ramos tópicos de curta duração que são frequentemente rebaixados contra o mestre são mais fáceis de se trabalhar.
A pergunta, então, torna-se "por que os recursos seriam maiores do que um ramo deveria ser?" Isto é provavelmente porque você está tentando fazer muito de uma vez. A melhor maneira de manter ramos tópicos de curta duração e de tornar a integração indolor é trabalhar de forma iterativa, onde o recurso comercializável mínimo é impiedosamente reduzido a seus fundamentos e o trabalho adicional sobre esse recurso é adicionado em incrementos separados.