You are correct in that render textures are the best way to do mirrors in Unity. Coincidentally, a game that I worked on recently required the use of mirrors (though our mirrors would also reflect things that may not exist in the world). We were also developing with Unity Free, so we had the same problem as you.
Our solution was as follows (recommended to us by a professional who works with Unity): write a script that copies a GameObject, and strips all Monobehaviour, Physics, etc. components off that object (as well as it's children). Basically all that should be left is the transform and the mesh/material data. Then, depending on the mirror location and orientation, you can change the transform of this shell object to the appropriate location on the other side of the mirror. We used a nifty parenting trick that I can't remember the exact code for. I'll dig into our code when I have a chance and update this post.
For any dynamic objects, you'll have to write a script to update the 'mirror object' based upon the original object's location and animation. You could either store a reference to the original object in your mirror object, or vice versa. This is probably the hardest part of the process.
As for the mirror itself, you can apply any kind of transparent material to it in order to make it look a bit more like the surface you want.
The whole process itself sounds daunting but when it comes down to it, mirroring in this way isn't actually that bad. It's when you want different things happening in the 'mirror world' that it gets messy.
Hope this helps :)