svn:externals as "soft source control link" in modular applications.
svn:externals can help you avoid some manual tasks and give a clear idea on what is what (and in what version).
You have several kinda "independent" products called "sites" that rely upon libraries. You got relase cycles for your products AND for your libraries as well.
For increased stability you might not want to work with trunk library code anywhere as it might break not only one but multiple sites. On the other hand in more agile approaches a "break early, break often" could be desirable.
So having the choice what library code version to use in your mainline development would be a plus.
Additionally your stabilizing/incubation branches (if any in the future) might want to sync with one specific version of the libraries so that reinforced compatibility will be transported into the resulting tags as well.
I would suggest the following Layout:
repository-root
site1
trunk (active development, unstable)
mycode
library1 -> external of "library1/tags/2.0"
branches
2-branch (maintenance, stable)
mycode
library1 -> external of "library/tags/1.0"
tags
2.0.0
mycode
library1 -> external of "library/tags/1.0"
2.0.1
mycode
library1 -> external of "library/tags/1.0"
library1
trunk
tags
1.0
2.0
...
There is no need to merge or move arround library source code when you change your mind and decide "Hey using the new 2.0 library1 API in our trunk was a piece of cake maybe we should use the trunk in the future.".
Lets imagine there is a bug in "library1 1.0" so you release "library1 1.1". You will need to make a new bugfix release of your main application as well and ship it out. so you update your "site1 2.0" maintenance branch, test and create a tag.
repository-root
site1
trunk (active development, unstable)
mycode
library1 -> external of "library1/tags/2.0"
branches
2-branch (maintenance, stable)
mycode
library1 -> external of "library/tags/1.1" (changed the property)
tags
2.0.0
mycode
library1 -> external of "library/tags/1.0"
2.0.1
mycode
library1 -> external of "library/tags/1.0"
2.0.2
mycode
library1 -> external of "library/tags/1.1" (inherits property change)
library1
trunk
tags
1.0
1.1
2.0
...
Externals insure that YOU have the choice as to what library changes you want to incorporate and WHEN you want it. This will help to reduce "surprises".
Be aware though that svn:externals slow down your "svn update" commands with each external that has to be checked. Code is underway to improve that though.
Check out the silverstripe public repository for how they are doing things. Works well for them.
svn propget svn:externals http://svn.silverstripe.com/open/phpinstaller/tags/2.4.2/
Hope I could help