Да, есть важный момент: код на cljc не обязан полностью совпадать между реализациями. С помощью reader conditional можно указывать различия.
То есть, теоретически можно сделать какой-нибудь каналоподобный объект, который в clj будет торчать из сервера (лезть в пул вебсокетов, обращаться к API gateway, и т.п.) а в cljs будет к этому же серверу подключаться через вебсокет-клиент.
Но — это использование механизма несколько не по назначению. Он нужен чтобы реализовывать одинаковое поведение на разных платформах. Я б всё-таки рекомендовал разделить эти сущности на серверную и клиентскую. А то мало ли, потом захочется перенести обработку серверного канала в NodeJS+cljs, придётся эту конструкцию распиливать.