The general solution is to use the optional width argument to makebox.
\makebox[0pt]{\textbullet}
However if you do this
\(\leftarrow\makebox[0pt]{\textbullet}\rightarrow\)
you will still get little spaces at the ends of the arrows (because that's what you normally want). So you may still need some negative space, unless you want to adjust the types of the math atoms themselves, like this
\(\mathord{\leftarrow}\makebox[0pt]{\textbullet}\mathord{\rightarrow}\)
If you were trying to make the whole thing into a binary operator you might do something like this
\newcommand\spaceship{\ensuremath
\mathbin{\mathord{\leftarrow}\makebox[0pt]{\textbullet}\mathord{\rightarrow}}}
\(a\spaceship b\)

Note that the symbols do actually overlap, rather than abut. This is more obvious if you turn the arrows round as you originally had in your example.
\newcommand\spider{\ensuremath
\mathbin{{\rightarrow}\makebox[0pt]{\textbullet}{\leftarrow}}}
\( a\spaceship b\) and \( c\spider d\)

As pointed out in the comments, the \mathord command isn't strictly necessary either; you can achieve the same effect simply by surrounding a sub-formula with braces, as shown in the second example.
Note also that the contents of a makebox are set in horizontal mode even when they are in the middle of a maths formula, hence the use of \textbullet rather than \bullet.