It would be useful if there was an OPTION to load relevant texture images from the 3d file being loaded but its not always the case that you always want images loading for you.
Another option might be a function for getting the Texture Filenames from a loaded 3D object if they were stored in the model file.
As it is....Its just 2 lines of code vs 1 line of code.
id = LoadObject("xxx")
SetObjectImage( id, LoadImage("xxxTexture") , 0 )
(Not really hard work)
Since you know what model your loading then you should also know what image files it needs.
As Jeff has aid above ...the separate loading of textures and models allow you to do various things that you cant do if every model loaded its own textures.
You can have two characters in your game that use the same model but different textures (2 textures - 1 model) - multiple skins
You could have many different models using one texture (like an atlas texture) to speed up rendering and share resources (1/2/3/4/5 models - one texture) - thers no point in loading this one texture many, many times. it will just slow down the game and eat up memory!!
You might want to share a reflection map between many models in a scene.
You might want an object (a character) to be able to get blood on his texture so a different texture is loaded depending on what circumstances he is in...etc...
You might want to resize the loaded image on certain platforms so models on mobiles scale down the texture size.
The most important thing is that you have full control over what texture is used at any given time so if your 3d model isnt using it you can delete it and save memory etc...
If we did have it automatically loading images for us then we would also want to get the ID of that texture image that was loaded so that you dont accidentally load another texture into that ID location.
ONE VERY SIMPLE SOLUTION I HAVE USED:
If your filename for the texture has the same name as the 3d model then you can write your own function in about 1 minute that will auto load the model and the texture for you
Function Lazy3DFileLoad(Name as string)
id = LoadObject(Name + ".x") // change file extensions for your model format
SetObjectImage( id, LoadImage(Name + ".png") , 0 )
Endfunction id
So you just use one line of code but a texture is loaded for you and set to the object as long as it is named the same as the model file.