In my opinion, there are three main reasons that students are ill equipped to handle function transformations:
They think about transformations as operations on expressions: "If I add $1$ to the $x$ in this expression, then the graph will shift this way". In fact function transformation is about the relationship between two functions.
Relatedly, although two different functions are involved in a transformation, usually only one is named. For example, in your question above, you talk about $y=f(x)$ and $y=f(2x)$. There is no explicit mention of the function $g(x)=f(2x)$. The function they are trying to graph is never explicitly written as a function of $x$, which is a big problem, since before transformations, this is all they have seen.
I think the quantifiers are all mixed up in students heads. When we write "the graph of $y=f(x)$" we mean "All the points $(x,y)$ which satisfy $y=f(x)$", but to the student the "$y$" in $y=x^2$ and the "$y$" in $y=(x+3)^2$ look like "the same $y$".
When I teach, I usually do so through structured sequences of exercises, with discussion between to cement the "moral of the story" which we are supposed to be learning from the exercises. So here is my sequence of questions, which I believe avoids these three pitfalls. I would make sure students do more than one question of each type before moving on. We discuss each one, and make sure we can verbalize everything. Also note that I will only discuss horizontal shift type questions below, but at each stage I would be using each type of transformation, not just horizontal shifts.
Question 1: If $f$ and $g$ are functions, and we know that $(4,5)$ is on the graph of $f$, and we know $f(x) = g(x+2)$ for every $x$, what point can we determine is on the graph of $g$? (Note that the universal quantification of the equation is made explicit!)
Solution 1: Since $f(x)=g(x+2)$ for every $x$, it is in particular true for $x=4$. So $f(4)=g(4+2)$. $(4,5)$ was on the graph of $f$, so $f(4)=5$. Thus $5=g(6)$. So $(6,5)$ is on the graph of $g$. Note that this does exhibit the "expected" behavior
Moral 1: Did you notice that the point on $g$ had the same ordinate as the point on $f$, but its abscissa was $2$ greater than the point of $f$ is was related to? Think about why. Will this relationship always be true? Try to verbalize that. "For each point on the graph of $f$, there is another point on the graph of $g$ with the same ordinate, but whose abscissa is two greater". Get good at moving from the symbolic expression to the verbal expression.
Question 2: If this is the graph of $f$ (GRAPH), and we know $f(x)=g(x+2)$, what does the graph of $g$ look like?
Solution 2: Apply insight from first question to determine that "For each point on the graph of $f$, there is another point on the graph of $g$ with the same ordinate, but whose abscissa is two greater". Use this realization on several points. Determine that, graphically, each point on $f$ is related to a point on $g$ which is "two units to the right". Draw the graph of $g$. Get good at thinking through this sort of relationship quickly.
Question 3: If $f$ and $g$ are functions, and we know that $(4,5)$ is on the graph of $f$, and we know $f(x+2) = g(x)$ for every $x$, what point can we determine is on the graph of $g$?
Solution 3: We only know that $f(4)=5$. So to use the equation relating $f$ and $g$, we will need to choose an $x$ which results in $f$ receiving the input $4$. So we need $x+2=4$, or $x=2$. Putting this into the equation, we have $f(2+2)=g(2)$, so $g(2)=5$.
Moral 3: This problem was harder because we had to think carefully about what value $x$ needed to be so that we were applying $f$ to something we know. Compare this problem to the last kind of problem. They are basically the same: we have a relationship between two functions, and a point on one, and we need to find the point on the other. In this case "For every point on $g$ there is a corresponding point on $f$ whose ordinate is the same, but whose abscissa is $2$ less", or equivalently "For every point on $f$ there is a corresponding point on $g$ whose ordinate is the same, but whose abscissa is $2$ more". Either verbalization is cool. In any case, we have a point on $f$, and so the corresponding point on $g$ must have abscissa $2$ less.
Question 4: If we know $f(x+2) = g(x)$, and this is the graph of $f$, what is the graph of $g$?
Solution 4: By the verbal description of the relationship, we see that the graph of $g$ is the graph of $f$ shifted $2$ units to the left.
Question 5: If $f(x)=x^2$, and $g(x) = f(x+3)$, what is a formula for $g(x)$?
Question 6: If $f(x)=x^3$ and $g(x) = (x-2)^3$, can you write an equation expressing the relationship between $f$ and $g$?
Solution 6: At this point, the student can write either $g(x)=f(x-2)$ or $g(x+2)=f(x)$, although the first form is more common. If both forms come up, talk about why they are both valid, and both express the same idea.
Question 7: You know the graph of $f(x) = x^3$. Now graph $g(x)=(x-2)^3$ by first finding an equation expressing the relationship between $f$ and $g$, and then using that relationship to relate points on $f$ to points on $g$.
For completeness, here is what I would expect as a solution to the
Question "Graph $f(x) = (x-3)^2+1$ by finding a sequence of related functions".
Ideal student response
Plan of attack: I know the graph of $g_0(x) = x^2$. I will relate $g_0$ to $g_1(x) = (x-3)^2$, and then relate $g_1$ to $f$.
The relationship between $g_0$ and $g_1$ is $g_1(x) = g_0(x-3)$. This says that for each point on the graph of $g_1$ there is another point on the graph of $g_0$ whose ordinate is the same, but whose abscissa is $3$ less. So the graph of $g_1$ is the graph of $g_0$ shifted $3$ units to the right.
[Illustration with graph of $g_0$ and $g_1$, with a few key points and their relationship shown. A generic "$x$" and "$x-3$" are marked to show that $g_1(x) = g_0(x-3)$]
We also know $f(x) = g_1(x)+1$. So to each point on $g_1$ there is a point of $f$ with the same abscissa, but with ordinate one greater. So the graph of $f$ is the graph of $g_1$ shifted up by one.
[Illustration with graph of $g_1$ and $f$, with a generic "$x$" marked to show $f(x)=g_1(x)+1$].
I will note that I have only tried this approach as a tutor, not as a teacher. I have probably tutored $20$ students this way, and everyone has become a master of function graphing. Over time, much of this scaffolding can drop away, and the student can start graphing "on sight", but this is appropriate post rigorous thinking, not mere procedural memorization. This is also the most powerful way I know to instill students with the knowledge that "Functions are gadgets which take inputs and return outputs, they are not just expressions". Internalizing this seems to be essential to this approach, which is an added "side benefit" (or the main point depending on your perspective).
I have almost always paired these lessons with completing the square. Having first learned transformations, now graphing any quadratic of the form $f(x) = a(x-h)^2+k$ is easy. Completing the square allows us to put quadratics in that form, so we can graph arbitrary quadratics without resorting to plotting points! This is powerful, and I think appreciated by students. Coincidentally it also makes solving quadratic equations much easier...