I had the same problem. I solved it via a module.
- Make a new custom nuxt module. documentation for creating a module 
- In the setup method hook into the - generate:pagehook:
 - nuxt.hook('generate:page', async (page) => {
  const render = await renderToString(page.html, {
    prettyHtml: true,
  });
  page.html = render.html;
});
 - documentation for nuxt hooks - documentation for stencil hydration (- renderToString)
 
- Register the css classes you need via - nuxt.options.css.push(PATH_TO_CSS)
 
- Register the module in the nuxt config. - 
- Note: Make sure in the - nuxt.config.tsthe- defineNuxtConfiggets exported as default.
 
 
- Tap the vue compiler options in the nuxt config: - vue: {
  compilerOptions: {
    isCustomElement: (tag) => TEST_TAG_HERE,
  },
},
 
- This depends on how you wan't to use the custom elements. In my case I defined the elements over the stencil loader in my - app.vuefile:
 - import { defineCustomElements } from '<package>/<path_to_loader>';
defineCustomElements();
 - You could also import the elements you need in your component and then define them right there, for example in a - example.vuecomponent:
 - import { CustomElement } from '<package>/custom-elements';
customElements.define('custom-element', CustomElement);
 
Here is an example from my module and config:
./modules/sdx.ts
import { defineNuxtModule } from '@nuxt/kit';
import { renderToString } from '@swisscom/sdx/hydrate';
export default defineNuxtModule({
  meta: {
    name: '@nuxt/sdx',
    configKey: 'sdx',
  },
  setup(options, nuxt) {
    nuxt.hook('generate:page', async (page) => {
      const render = await renderToString(page.html, {
        prettyHtml: true,
      });
      page.html = render.html;
    });
    nuxt.options.css.push('@swisscom/sdx/dist/css/webcomponents.css');
    nuxt.options.css.push('@swisscom/sdx/dist/css/sdx.css');
  },
});
Important: This only works if the stenciljs package supports hydration or in other words has a hydrate output. Read more here
./nuxt.config.ts
import { defineNuxtConfig } from 'nuxt';
//v3.nuxtjs.org/api/configuration/nuxt.config export default
export default defineNuxtConfig({
  typescript: { shim: false },
  vue: {
    compilerOptions: {
      isCustomElement: (tag) => /sdx-.+/.test(tag),
    },
  },
  modules: ['./modules/sdx'],
});
./app.vue
<template>
  <NuxtLayout>
    <NuxtPage />
  </NuxtLayout>
</template>
<script setup lang="ts">
import { defineCustomElements } from '@swisscom/sdx/dist/js/webcomponents/loader';
defineCustomElements();
// https://v3.nuxtjs.org/guide/features/head-management/
useHead({
  title: 'demo',
  viewport: 'width=device-width, initial-scale=1, maximum-scale=1',
  charset: 'utf-8',
  meta: [{ name: 'description', content: 'demo for using a stencil package in a nuxt ssr app' }],
  bodyAttrs: {
    class: 'sdx',
  },
});
</script>
Update
I tested my setup with multiple components and it looks like you cannot define your components in the module. I updated the answer to my working solution.