Using discrete coordinates should mostly bypass collision related issues entirely, so that would seem to be a good solution.
I would argue that learning about the pitfalls of collisions and collision detection (and by extension the effects of fps and the concept of updates/ticks) is pretty fundamental, but that's just my opinion and it really depends on what your class is focusing on teaching.
If I were to approach this issue with values rather than helper sprites, I would try to implement a flexible, automatic system. Assuming there are no situations where an enemy can come into contact with multiple platforms, use two instance variables to keep track of the lower and upper bounds to patrol. These variables can be set on collision with a platform object, based on the position and width of the platform. If the position of the enemy object exceeds these bounds, turn around (trigger once while true).