Olá, Matheus!
Entendo a sua dúvida e vou tentar esclarecer para você.
1 - O FutureBuilder é utilizado quando temos uma operação assíncrona que retorna um Future e queremos exibir diferentes widgets dependendo do estado desse Future (por exemplo, exibir um indicador de carregamento enquanto o Future está sendo processado e exibir o resultado quando ele estiver pronto). Ele é uma forma conveniente de lidar com a atualização da interface do usuário com base no resultado de uma operação assíncrona.
2 - Sim, é possível utilizar o FutureBuilder junto com o StatefulWidget. O FutureBuilder pode ser utilizado dentro do build do StatefulWidget para construir a interface do usuário com base no resultado do Future. O StatefulWidget, por sua vez, permite que você atualize a interface do usuário em resposta a eventos ou mudanças de estado.
3 - É verdade que o código pode ser reconstruído duas vezes, uma vez pelo FutureBuilder e outra vez pelo setState. No entanto, o Flutter é otimizado para minimizar a reconstrução desnecessária de widgets. O Flutter utiliza um mecanismo chamado reconciliação, que compara a árvore de widgets anterior com a nova árvore de widgets e atualiza apenas os widgets que realmente precisam ser atualizados. Portanto, o impacto no desempenho deve ser mínimo.
Espero ter ajudado a esclarecer suas dúvidas! Se tiver mais alguma pergunta, é só perguntar. Bons estudos!