Você não percebe isso, mas precisa executar o loop interno duas vezes ao longo do loop. Uma vez para obter o nome da variável para atribuir, então a segunda vez para realmente fazer a atribuição. Você faz isso com eval. Estou muito impaciente para depurar isso agora, mas isso deve ser um começo:
for VARIABLE in alpha bravo charlie; do
eval $VARIABLE=$(sed -n '/$VARIABLE/s///gp;' $FILE)
done
No caso geral, você pode precisar escapar de $ s em sua linha, dependendo se você deseja que as variáveis sejam substituídas na primeira ou segunda execução. No seu caso, não faz diferença, exceto pela primeira, e você a quer na primeira invocação.