Just note that with a correct projection matrix the aspect ratio scaling is actually multiplied _before_ your own matrix transformations.
If you multiply the scaling after the translation, like you did, you'll notice that no matter how wide or tall your window gets resized, its corners will always be at -1 and +1 in X and Y. So you are basically stretching the coordinate system, and to counter that you squeeze your quad. So the following will give consistent behaviour which will make the window/viewport be a "window into a 2D coordinate system", with uniform scaling:
static Matrix4f createTransformationMatrix(Vector2f translation, Vector2f scale, float rotation) {
Matrix4f matrix = new Matrix4f();
matrix.setIdentity();
Matrix4f.scale(new Vector3f((float)Display.getHeight()/Display.getWidth(), 1, 0), matrix, matrix);
Matrix4f.translate(translation, matrix, matrix);
Matrix4f.rotate((float) Math.toRadians(rotation), new Vector3f(0, 0, 1), matrix, matrix);
Matrix4f.scale(new Vector3f(scale.x, scale.y, 0), matrix, matrix);
return matrix;
}