Рекурсивность без методов-хелперов сделать невозможно даже если исполнять код модели рекурсивно, все сводится к тому что пока функция не исполнилась полностью, то неизвестно, что она возвращает, а это значит, что прямое обращение к свойствам невозможно:

const triggerFamilyChangeName = createEvent<{id: string, value: number}>()

const user = model({
  props: {name: '', age: 18} as Family,
  output: {
    motherName: '',
    changeName: createEvent(),
  },
  create({name, age, familyItems}, {onMount}) {
    const addFamily = createEvent<Family>()
    const $family = createStore<Family[]>([])
    $family.on(addFamily, (items, item) => [...items, item])
    const family = list($family, (props) => spawn(user, props))
    const mother = spawn(user, {name: 'alice'})
    const changeName = createEvent<number>()
    age.on(changeName, (_, upd) => upd)

    pushToKv({
      kv: family,
      source: familyItems,
      getKey: 'name'
    })

    sample({
      clock: triggerFamilyChangeName,
      target: pushToKv({
        kv: family,

      })
    })
    return {
      $name: name,
      motherName: mother.$name,
      changeName,
      addFamily,
      sendToServer: () => {},
      mother,
      family,
    }
  }
})

Самый оптимальный вариант работы с рекурсивностью, учитывая возможности эффектора по отложенному описанию связей, это функция lazy/rec которая бы выполнялась уже после завершения вычисления самой модели:

const user = model({
  props: {name: '', age: 18},
  create({name, age}, {onMount}) {
    const $motherName = createStore('')
    // const $fullName = combine(name, $motherName)
    lazy(() => {
      const mother = spawn(user, {name: 'alice'})
      sample({
	    clock: onMount,
        source: mother.$name,
        target: $motherName,
      })
    })
    return {
      $name: name,
      $motherName,
      $fullName,
    }
  }
})

Открытый вопрос: как создавать стор, значение которого бы при инициализации читалось из стора созданного в lazy, sample запишет значение в стор лишь после первого апдейта

Технические вопросы

Как технически реализовывать рекурсивность — вопрос открытый. Есть две проблемы, локальная и глобальная Локальная: что будет содержать инстанс ещё не инициализированной модели Глобальная: как производить поиск нужных данных в рекурсивно описанном дереве