What's most misleading about Leibnizian notation is its implicit context dependence. After you get over that hurdle, it will be easy to safely think of $dy/dx$ as a fraction.
In the context of $y=f(x)$, you think of $dx$ either as an arbitrary nonzero infinitesimal also called $\Delta x$---I did this, using Keisler's book last fall---or as a nonzero real $\Delta x$ small enough for whatever your accuracy you currently need. Either way, $dy$ is defined as $f'(x)dx$, where $f'(x)$ is defined as the usual limit of difference quotients $\Delta y/\Delta x$. Of course, in the $x=g(y)$ context, the meanings of $dx$ and $dy$ switch, as do the meanings of $\Delta x$ and $\Delta y$. In the $z=h(x,y)$ context, the meanings of $dx$, $dy$, $\Delta x$, and $\Delta y$ change yet again.
The "small enough, but not infinitely small" approach is what you'll find in standard calculus textbooks, with a section devoted to the distinction between $\Delta y$ and $dy$ (in the $y=f(x)$ context).
That said, this fall I'm planning to de-emphasize $dy/dx$ as much as I can get away with. Whether I use the little-o notation or not, I will push hard (with lots of numerical examples) on the $\Delta y=f'(x)\Delta x+o(\Delta x)$ definition of $f'(x)$, and how this makes the chain rule true but not trivial.
If $y=x^2$ y=f(x)=x^2$ and $dx=\Delta x$ is small (but not infinitely small this time around), then $\Delta(x^2)$ equals $(x+\Delta x)^2-x^2$ equals $2x\Delta x+\Delta x^2$ equals $2x\Delta x+(\mathrm{small})\Delta x$, so $dy=2x\ dx$ and $f'(x)=2x$. In the context of $y=f(u)$ and $u=g(x)$, my presentation of the chain rule will just be that a first-order approximation of a first-order approximation is a first-order approximation:
\begin{align*} \Delta y&=f'(u)\Delta u+(\mathrm{small}_1)\Delta u\\ &=f'(u)(g'(x)\Delta x+(\mathrm{small}_2)\Delta x)+(\mathrm{small}_1)(g'(x)\Delta x+(\mathrm{small}_2)\Delta x)\\ &=f'(u)g'(x)\Delta x+(\mathrm{small})\Delta x \end{align*} No fractions here!

