У вас бардак в алгоритме поэтому с `new Fuse` (скорее всего и с useFuse) работает, но не так как вы ожидали.
Пустой массив это логичный вывод
console.log('results:', results) в этот момент
потому что
getProducts() вы вызываетe после изменений в
input
Рабочий кусок с useFuse
import { useFuse } from '@vueuse/integrations/useFuse';
const data = ref([]);
const input = ref('')
const found = ref();
fetch('https://fakestoreapi.com/products').then(r => r.json()).then(j => {data.value = j})
const { results } = useFuse(input, data, { matchAllWhenSearchEmpty:false, fuseOptions: { includeScore: true, keys: ['title'] } })
/*<template>
{{ results }}
</template>*/