If the last column of the transformation gives the translation, then points are being represented as column vectors and you left-multiply by the matrix to transform them. Further transformations chain leftwards from this. Typically, instead of splitting apart the matrix in order to compute the image of the point, you would convert to homogeneous coordinates by appending a $1$ to the point’s coordinate vector and multiplying that by the full $4\times 4$ matrix: $$\begin{bmatrix}a&b&c&d\\e&f&g&h\\i&j&k&l\\m&n&o&p\end{bmatrix} \begin{bmatrix}x\\y\\z\\1\end{bmatrix}.$$ To recover the inhomogeneous Cartesian coordinates of the point, you divide through by the last element of the vector, unless it’s zero, in which case you have a point at infinity.
If the last row of the transformation matrix is $(0,0,0,1)$, then you have an affine transformation and can take some short cuts. (The upper-left $3\times3$ submatrix is the linear part of the transformation, but might not in general be limited to a rotation.) The fourth element of the vector being transformed will remain unchanged, so you don’t need to bother with that part of the full multiplication. If you’re dealing exclusively with affine transformations, you can save a bit of storage and represent them with $3\times4$ matrices. (Of course, composing them requires expanding to $4\times4$, at least virtually.) This is a common convention: for example, Adobe’s PostScript language uses non-square matrices to represent transformations in 2-D. Leaving out the last row means that the resulting vector will only have three elements, but since we started by tacking a $1$ on to the end of the point’s coordinates and will eventually divide by that $1$ again after transforming, this all works out automatically.
On the other hand, if the last row of the transformation matrix isn’t a multiple of $(0,0,0,1)$, you’re dealing with a projective transformation of space and need to work with the full $4\times1$ homogeneous coordinate vectors.