The idea of mapping to either Vars or Python objects directly come from clojure-jvm's namespaces, which can map either to Vars or to Classes.
If we decide to only map to Python objects, interop is simpler, but we lose, well, clojure's Var semantics. Things as simple as (def some-var some-value) currently break (as expected) if some-var is already a Python object and not a Var, so we would need new semantics here.
We can also decide to only map to Vars, wrapping Python objects into Vars as necessary upon import. Basically:
(ns 'abc)
(use 'numbers) (or any Python package/module)
=>
Create a numbers namespace (not the same object as the numbers module!)
For each name in dir(numbers), create a Var that wraps it, intern that var to the numbers namespace, and refer it in the current namespace.
Or we can decide to skip the first step and intern directly into the current namespace, but that would be different semantics than clojure-jvm's. For example, the var would probably have to be marked as private (as Number is not expected to be exposed when abc.clj is imported itself by someone else).
All the wrapping seems a bit excessive to me, but if I had to choose between one of the two options, I would probably still choose the latter
Antony