Muitos sistemas de controle de origem de segunda geração funcionam usando um "checkout" conectado que informa o servidor que você pretende modificar um arquivo. Exemplos incluem TFS, SourceGear Vault e muitos outros. Dessa forma, você pode cumprir tecnicamente seus requisitos. Como apontou Adam Butler, esses tipos de ferramentas vêm com seus próprios problemas (sem entrar em um longo debate - suporte limitado ao trabalho offline e geralmente fluxo de trabalho de desenvolvimento contraproducente).
Definitivamente, eu sugeriria algum tipo de abordagem hierárquica para alocar o trabalho de refatoração. Os desenvolvedores podem ser agrupados logicamente em sub-equipes, cada uma responsável por áreas específicas do código. Dependendo de como você deseja estruturar as equipes, cada uma delas pode ter um papel de "líder", responsável pelo design de alto nível da área da equipe. Essa estrutura deve ser bem conhecida pelos desenvolvedores e deve simplificar a comunicação para refatoração. Estou certo de que essa abordagem parece muito formal e atrasada para alguns, mas acho que é preferível que mais de 20 desenvolvedores usem uma abordagem "livre para todos" para refatorar um sistema grande. Algumas refatorações ocorrerão em alto nível (por exemplo, como o módulo X se comunicará com o módulo Y), nesse caso, você precisará de pessoas que possam fazer chamadas no nível apropriado. Nem todo desenvolvedor da equipe deve tomar decisões arquitetônicas; portanto, uma hierarquia é quase imposta em qualquer caso, mesmo que alguém escolha ignorá-la.
Então, basicamente, existem ferramentas para atender aos requisitos básicos que você apresenta, mas nenhuma ferramenta substitui as comunicações adequadas e tem um pequeno número de pessoas dirigindo a arquitetura geral do seu projeto.