Можно делать так - создается базовый лэйаут хидера - компонент, который как правило не содержит логики, но задает внешнее оформление и набор слотов, через которые в него будут передаваться компоненты.
Далее создаете кастомные компоненты на базе этого лэйаута типа
registration-header
,
user-header
и т.д. и добавляете в слоты компоненты, отвечающие за данный конкретный вариант хидера.
По поводу создания собственной темы - можно сделать какой-то базовый компонент, от которого будут наследоваться аттрибуты, отвечающие за тему. На базе этого аттрибута будет в конкретном компоненте будет использоваться соответствующий класс. Например, в компоненте выпишите так:
<template>
<div :class="`header-${themeName}`">
</div>
</template>
<style>
.header-dark{
...
}
.header-light{
...
}
</style>
Можете посмотреть исходники библиотеки типа vuetify - как там реализуется поддержка темы.