Как работать с полученным HTML во vue?
Лучше никак. Измените api так, чтобы получать json вместо html, и создавайте разметку из данных средствами vue.

Ну а так-то можно делегированием воспользоваться:

<div v-html="свойствоСодержащееHTML" @click="onClick">
methods: {
  onClick(e) {
    if (e.target.tagName === 'BUTTON') {
      const id = e.target.closest('.product').dataset.id;
      ...
    }
  },
  ...
},
https://jsfiddle.net/grfo05vm/
Или можно затащить в рантайм компилятор шаблонов. И возвращать с сервера именно <div class="product" v-for="item in poducts" :key="item.id">
  <div class="product__name">{{ item.name }}</div>

  <button @click="test(item.id)">кнопка</button>
</div>, компилировать это на лету и монтировать как компонент.

Но это тоже не очень хорошо. И годится только как запасной вариант, если ничего другого сделать невозможно.