Hola Juan,
First, I want to stress that my Erlang skills are very weak and most of what I say is speculation -> add AFAIK to every statement.
1. Data structures, deftype, defrecord
New data structures(deftype, defrecord) can follow the Erlang convention of using records and then naming them with `-type`. Clojure's data structures '(), [], {}, #{} can naively use erlang:lists, erlang:array, erlang:map/erlang:dict, and erlang:set. The first task here is to check if the performance guarantees and basic operations are maintained. For example, erlang:array s can't be directly compared for equality.
2. Namespaces, symbols, and keywords
It would be desirable to keep a namespace -> module one to one mapping. In Erlang atoms are used both as symbols and keywords and are not namespaced. Namespacing can probably be solved either by a munging mechanism or by using . as described here[1]. For interop, Clojure keywords should probably be represented as plain atoms and symbols as a new type. I'm not sure how this would work.
3. Protocols and multimethods
Erlang doesn't have type based dispatch and the concept of extending an implementation is somewhat supported by `-behavior` and `-callback`. I don't know enough about Erlang's module system to know if that is enough to implement Protocols and multimethods. It is very important that they are extensible which might be hard/impossible in Erlang. I expect somebody with more knowledge to try. Since they would be using the same dispatch mechanism, there would be no performance difference between them.
4. Vars, atoms, refs, and agents
In an async context only agents make sense, in the same way that only atoms make sense in ClojureScript. The problem is that while Clojure allows applying arbitrary functions/closures over the reference, in a message passing context only values can be serialized and used. Therefore the set of actions over the agent would be closed as opposed to Clojure's agents[2]. Closed-agents could be implemented on top mnesia or similar libraries.
5. Strings
Strings can be problematic in Erlang. I would suggest to just copy Elixir's model wholesale[3] and then figure out how well it maps to clojure.string and if the list of characters vs unicode string mismatch leaks out.
With those five groups there is already a lot to figure out. Then there is the problem of integrating necessary Erlang semantics into Clojure:
1. Pattern matching
I don't know if there are any gaps between Erlang's pattern matching and core.match. In any case, it's a good model to follow.
2. PIDs, messaging! and the actor model
Try out syntax to represent ! and receive that works in Lisp and Clojure idioms. I would look at LFE and Pulsar for this.
Once all those points are covered through prototypes/mocks figure out if the effort is worth it. It might as well be that LFE/Pulsar are enough to have a Clojure-like-thing with the desired semantics or Clojure with almost-the-desired-semantics. I don't have a burning need for Clojure on the BEAM and no time to actively pursue it but it does interest me. It would be cool to ask a Google Summer of Code student interested in language design to get a prototype working.
Best
Sebastian