A quick and dirty way to do this is to pad the image with pixels of some inoffensive color, so that the actual meaningful part of the image gets mapped to a smaller portion of the sphere:
image = Import["ExampleData/ocelot.jpg"];
{width, height} = ImageMeasurements[image, "Dimensions"];
image = ImagePad[image, {{2 width, 2 width}, {height, height}}, White];
SphericalPlot3D[1, {Theta, 0, Pi}, {Phi, 0, 2 Pi}, PlotStyle -> Texture[image],
TextureCoordinateFunction -> ({#5, 1 - #4} &), ViewPoint -> Left]
The first three lines create a new version of your image that's padded with white pixels on all sides; you'll need to play around with your values to get the aspect ratio right. Projecting this image onto the sphere then yields the following:
Note that I changed the ViewPoint
in order to get the image on the "front" of the sphere. With the default viewpoint, you end up with the image about 3/4 of the way to the other side of the sphere.
The other way to do this would be to set TextureCoordinateScaling -> False
and then rescale your TextureCoordinateFunction
(put numbers in front of #5 and #4 and see what happens.) But I'm not sure if there's a way to do this without having the image repeat itself ad infinitum.