The lack of z-buffer and perspective correction have nothing to do with the wobbliness. As mentioned before, the wobbly polygons was caused by insufficient precision combined with all calculations being done using
integers instead of
floating point values.
The PSOne has a co-processor called the Graphics Transform Engine, which is meant to perform many 3D operations like matrix-vector multiplication, lighting and fog. It was fixed-point[*] (aka: integer) based and couldn't work with floating point numbers. The X, Y and Z coordinates of vectors are stored as 16-bit values: 1-bit for sign, 3-bits for integral part and 12-bits for the decimal part. It only supported 3x3 rotation matrices with translation being a separate operation using vectors with 32-bit XYZ integer components (no fractional parts).
This seems to be one reason behind the wobbliness: while drawing a scene, the objects's polygons must be transformed from their local space into world space (at the very least one rotate and one translate command) and then from world into camera space (another rotate and translate). Since translation is integer-only (no fractional), it will "snap" around, the severity depending on the scale of the the scene elements. Also, if you have multiple rotations and translations stacking on top of each other, the precision errors will build up quickly.
Finally, the GTE will output the result of perspective transform as integer pixel coordinates (no fractional), which are to be fed into the GPU for drawing. This means it cannot display any subpixel movement: the polygon will snap in place until one of it's vertices moves enough to snap into a different pixel.
The DS, for example, was also integer-based but had subpixel movement since the final 2D output coordinates had fractional parts (the DS has edge antialiasing which wouldn't work otherwise). While there was some degree of wobbliness due to fixed point math, it was much less because the matrices on the DS had 32-bit components (1-bit for sign, 19-bits for integral, 12-bits for fractional) and were 4x4, so translation and perspective transformation could be done in the same operation. Translations also had 12-bit fractional, so they accumulated less errors.
You can find a complete technical description of the workings of the PSOne here
http://www.raphnet.net/electronique/psx_adaptor/Playstation.txt and for the DS here
http://problemkaputt.de/gbatek.htm#ds3dvideo
By the way, the PC version of FF8 still has wobbly polygons, probably because their 3D engine had a bunch of pre-calculated fixed point data optimized for the PSOne hardware that couldn't be easily converted. FF7 PC, however, is silky smooth, which means they could get away with simply replacing the data types on the code.