To do this you need to take the polygon of the reflective surface and the viewpoint and form a frustum. Then you need to reflect every object across the plane of the reflecting surface, and then manually (ie: on the CPU, in your code) clip each polygon to this frustum. It works, Ive actually done it in my engine (which is a zero overdraw portal engine). However, the manual clipping is actually quite slow, so using this technique can limit your max acceptable poly count quite a bit.
It is really recommended to use a stencil buffer for the clipping. If you must do the reflections without a stencil buffer, then there is one optimization on the above scenario you can make. Instead of mirroring each object across the mirror plane (ie: transforming each vertex), you can reflect the viewpoint once and then use the verticies as is. This will save a lot of calculation.
The code is actually quite complex, so hopefully just the theory is good enough for you. If not, maybe someone can recommend a tutorial the includes code.