Yeah, sorry, I was about to answer your question when I fell asleep. I've just gotten up for today and here I am answering you before I even read my email! :~)
Well, first of all, a terminological quibble: Prototyping is OOP; it's just a different approach to OOP from class/instance.
Second of all, this is just me talking; Jens probably wouldn't say what I'm about to say, and the rest of the world definitely wouldn't.
So. When you're designing a software project before you build it, there's nothing wrong with class/instance OOP, and I guess there's nothing wrong with what I still say is the peculiar Javascript approach of building a prototyping OOP system and then uglifying it by turning the concept of a prototype into a thing, the Prototype, that's provided as a sort of sidekick of every object, turning prototyping into a religion.
Where prototyping really shines is not in designing a project, but in diving in and building a system interactively, without designing. That is, the kind of exploration or creativity you see among Scratchers.
Snap! kind of has a foot in each world. We are definitely a flavor of Scratch, even though we're no longer a mod of Scratch, as BYOB was. We want to foster creativity and spontaneity. At the same time, the reason we felt the need to build something beyond Scratch is that (as you say) we're teachers, and we want to teach Computer Science to teenagers, and it follows that we also want to support the kind of project design you're doing.
So, no, I don't think you're overcomplicating your project by using classes and instances.
Side note: I'm a bad computer scientist, because I don't have the patience to design things. I just jump in and start coding. My friend and colleague Mike Clancy has characterized my programming methodology as "debugging a blank piece of paper." If I were building your project I'd probably start by making a sprite called P with a small filled circle as its costume, and teach it to respond to click and drag, and then I'd make the next point by making a child of P called Q. And then I'd make a line sprite called L that would have two points as sprite-local variables, and set them to P and Q. And so on. But your way is better, for big complicated projects.
Class/instance is terrible for tinkering. You have to work and work before the first thing happens on the stage. That was my point about the dogs. If you're telling a story about your dog and your friend's dog, you don't want to start by designing a Dog abstraction. You want to take a picture of Fido, preferably in front of a green screen, and load it into Snap!, and then start teaching him to do tricks, by programming methods. And then you want to add your friend's dog Spot, who's like your dog only different. There's no Platonic ideal Dog in your program, just dogs.