What I envision is a method where the user can select a language and items not available translated into that language are either shown in the as-written language or not displayed at all. As far as editing and storing the multiple translations... we have so far the square bracket approach. That means all translations are stored together and edited together. I think any problems with searching can be sorted out (probably with a little performance hit).
Another possibility is to store each translation in a separate database 'row'/record. This will improve performance (don't need to load all translations from database just to show one language version, and also don't need to parse for language identifiers). However, how does this get entered? I suppose a user would by default create the translation in their selected language. But how could they create additional translations in other languages? Perhaps a simple selector on the edit form would suffice to choose the language being entered. This could work for real content I think, but additional things like titles, block titles, menu items, etc... pose a bit of a problem. Perhaps a combination of the two approaches?
Just throwing some ideas out there... any thoughts?