Astro allows you to use Vue.js components and choose whether to hydrate them or not. The decision to hydrate a component or not depends on whether you need interactivity in that component.
Astro components are HTML-only templating components with no client-side runtime. They are rendered onto the page without JavaScript if no client:* directive is provided. This makes them static and non-interactive, but they load extremely fast because they don't require any JavaScript to run in the browser (source (https://docs.astro.build/en/guides/troubleshooting/)).
On the other hand, Vue.js components (or components from any other JavaScript framework) can be made interactive by hydrating them. Hydration involves sending the component's JavaScript to the client, which makes the component interactive. This is done using the client:* directive in Astro (source (https://docs.astro.build/en/tutorial/6-islands/1/)).
However, hydrating a component does come with a performance cost. The more JavaScript you send to the client, the slower your page will load. This is why Astro recommends an "HTML-first, JavaScript-only-as-needed" approach. With Astro, you can build your site using Vue.js components, but only hydrate the ones that need interactivity. The rest of your site will remain as static, lightweight HTML, ensuring optimal loading times (source (https://astro.build/blog/introducing-astro/)).
In terms of your design system, it's possible to have both Astro and Vue.js components. However, if performance is a priority, it might be better to use Astro for static components and Vue.js for interactive ones. Alternatively, you could provide just the markup and CSS and let the consumers create the corresponding components in their preferred framework.