Matrix rotation not changing scale
In your second example, the shape changes, because your are transforming the mat_rot by the matrix_world, but you need to do it the other way around.

obj.matrix_world = mat_rot @ obj.matrix_world


Further, your code should be streamlined to apply the transformations at object level (and not through ops).

from mathutils import Matrix
from math import radians
import bpy

bpy.ops.mesh.primitive_plane_add(location=(0, 0, 0))

obj = bpy.context.active_object

mat_rot = Matrix.Rotation(radians(45.0), 4, 'X')
mat_sca_x = Matrix.Scale(6, 4, (1, 0, 0))

mat_sca_y = Matrix.Scale(6, 4, (0, 1, 0))
obj.matrix_world = mat_rot @ mat_sca_x @ mat_sca_y


And finally, you can rely on other methods than ops, to add your geometry. See this answer for details on adding geometry from scratch.

from mathutils import Matrix
from math import radians
import bpy
import bmesh

# Create the object and mesh datablock.
me = bpy.data.meshes.new("me")
obj = bpy.data.objects.new("obj", me)

# Apply the transformation.
mat_rot = Matrix.Rotation(radians(45.0), 4, 'X')
mat_sca = Matrix.Scale(6, 4)
obj.matrix_world = mat_rot @ mat_sca

# Add the grid as the mesh
bm = bmesh.new()
bmesh.ops.create_grid(bm, x_segments=1, y_segments=1, size=1)
bm.to_mesh(me)

# Link the object to the scene.
scene = bpy.context.scene
scene.collection.objects.link(obj)