It's a common feature of interpreters that they impose a large slowdown on whatever is done in interpreted code; Python's is about 40×, although better interpreters like GhostScript and Lua are more like 10×. It's surprising the difference isn't bigger in this case, but I can mostly confirm your results, getting 3× except for small numbers:
In [1]: dl = lambda n: 1 if n < 10 else 1 + dl(n // 10)
In [3]: map(dl, [0, 1, 9, 10, 99, 1000, 15432, 32, 801])
Out[3]: [1, 1, 1, 2, 2, 4, 5, 2, 3]
In [4]: %timeit dl(15322)
100000 loops, best of 3: 4.64 µs per loop
In [5]: %timeit len(str(15322))
1000000 loops, best of 3: 1.41 µs per loop
In [6]: %timeit dl(0)
1000000 loops, best of 3: 721 ns per loop
In [7]: %timeit len(str(0))
1000000 loops, best of 3: 1.24 µs per loop