Можно ли не использовать getElementById во vue?
Я бы реализовал с помощью простой матрицы, вместо цвета также можно принимать объект с множеством параметров {Цвет, размер и т.д.}
Например: https://jsfiddle.net/3tqmcg3a/2/
Если не обращать внимание на разметку, у вас в шаблоне должно быть что-то вида:<template v-for="cell in cells">
<cell :color="cell.color" @click="changeAround(cell)"></cell>
</template>changeAround(cell) {
 // change cells color шт cells by using input cell

}
Смысл такой:
У вас есть массив клеток cells.
У вас есть компонент клетки и входной параметр у него - цвет.
При клике на cell вызывается обработчик, который вычисляет на основании данных клетки(порядковый номер, позиция) соседние клетки у которых нужно изменить цвет. Далее реактивно обновляется шаблон.