Please please please don't force your users to checkout an entire repository to get things to build. This is harking back to the old sourcesafe model and it wasn't good then.
Having one repository per project is fine.
If project1 needs code from project2, add an "svn:externals" property to the trunk of project1 which brings project2 into a sensible place under project1's directory. If project2 needs project3's code, it too can have an external property and bring the code in underneath it.
It's actually best if the externals references always points to a tag or a specific revision, but I'll let you off pointing to trunk if you avoid the "one huge projectspace" issue.
If you work with externals, anyone can just checkout the project they want and automatically get all the dependencies and just build away - just as you want. All their code is self-contained in a single working directory that contains just what they need, they can checkout multiple versions of multiple projects into separate working directories without wasting space and still keep track of what the hell is going on.
It may require some minor refactoring of your workspace if project1 expects to find project2 outside of it's project folder rather than inside, but that's a minor tweak in the grand scheme of things.
If you really have your heart set on a single repository, that's fine too (that's what we use at my workplace, and at home, come to think of it), however do ensure that you have a structure where each project has its own tags, trunk & branches folders, and that checking out the trunk of project1 is all you need to do to get the code for project1 to build.
Finally, if you really need a funky layout for your projects, you can add an extra single repository, which is basically a meta-repository.
This repository will contain 1 directory per top level project (with trunk tags & branches), and using externals, reference all the other projects and build the funky workspace in exactly the way you'd expect.
This way, by adding the extra repository, you get all the benefits of checking out and building in one step and at least stand a chance of managing situations where changes required for project1 break project3 because of code shared with project2, and you suddenly need to get an emergency fix out for project3.