I've also done this with layout files. That seems to be the usual method.
As wweumina pointed out, one way to get MAME to move something leftward is to tell MAME to draw something to the right of it. That's the way MAME's built-in Cocktail view works - The rotated screen is to the left of center because the normal screen is next to it.
<mamelayout version="2">
<view name="Cocktail">
<screen index="0">
<bounds x="-3.03" y="0" width="3" height="4" />
<orientation rotate="180" />
</screen>
<screen index="0">
<bounds x="0" y="0" width="3" height="4" />
</screen>
</view>
</mamelayout>
First off, when reading a .lay file, it's important to understand that the coordinates on the bounds lines are all relative. In the layout view above, there are two objects. The first is at -3.03, 0 and it's 3 units wide by 4 units tall (because that's what a rotated 4:3 arcade monitor would be). The second starts at 0, 0 and it's also 3 units wide by 4 units tall. Therefore, the total number of horizontal units taken up by this view is 6.03 (from -3.03 to 3), and the vertical is 4 (0 to 4). It's this 6.03:4 rectangle that MAME centers on your screen.
MAME will figure out the size of this rectangle on its own, based on the objects in the view, or you can tell MAME by putting bounds on the view. We'll look at both ways. The cocktail view lets MAME figure things out for itself.
We can make the cocktail view a 'left' view by changing a few things. For starters, let's change the name of the view (to "Left") and un-rotate the left screen. (That's as easy as deleting the orientation line.)
After that, we have to get rid of the screen on the right. It may be tempting to just delete the second screen, but that would leave only one object in the view, which would be 3 units wide and 4 units tall. That view would be centered on the screen, and it would look just like the standard view.
To give MAME enough info to figure out our intended layout from the objects themselves, we have to replace the second screen with something else. That something can be an image or 'internally rendered element'. In this case, we'll use an internally rendered black rectangle, which we'll define and then use.
The code to define the rectangle is:
<element name="1black">
<rect>
<bounds x="0" y="0" width="1" height="1" />
<color red="0" green="0" blue="0" />
</rect>
</element>
It's only 1 unit (square), but it will be scaled to whatever size gets specified in the place where it's used.
To change the second screen to blackness, remove the screen tags, and replace them with backdrop tags. Whereas the screen tag used index=, the backdrop tag uses element=. Since our element is called 1black, the code becomes:
<mamelayout version="2">
<element name="1black">
<rect>
<bounds x="0" y="0" width="1" height="1" />
<color red="0" green="0" blue="0" />
</rect>
</element>
<view name="Left">
<screen index="0">
<bounds x="-3.03" y="0" width="3" height="4" />
</screen>
<backdrop element="1black">
<bounds x="0" y="0" width="3" height="4" />
</backdrop>
</view>
</mamelayout>
That's pretty close to what you wanted, but it's not quite wide enough to get the game screen over to the left of a 16:10 (or 16:9) widescreen. Being that we don't want to mess with the aspect of the game screen, what we want to do is make the blackness wider. So the question then becomes, How many total width units do we need for your widescreen? 16:10 is 6.4:4, so 6.4 total width units (16:9 would be around 7.11). We no longer need the .03 space that was between the two screens, so if we move the screen to x="-3", the screen still takes up 3, and the blackness, which starts at x="0" should take up 3.4 (or 4.11.)
That will push you up against the left side of the monitor. Although that's what you asked for, I think it looks better if there's a little space, so you might want to cut the backdrop width to around 3.2 (or 3.8 )
The resulting .lay file would be:
<mamelayout version="2">
<element name="1black">
<rect>
<bounds x="0" y="0" width="1" height="1" />
<color red="0" green="0" blue="0" />
</rect>
</element>
<view name="Left">
<screen index="0">
<bounds x="-3" y="0" width="3" height="4" />
</screen>
<backdrop element="1black">
<bounds x="0" y="0" width="3.2" height="4" />
</backdrop>
</view>
</mamelayout>
Now that works fine, but for your purposes, I feel that it's easier to tell MAME what the bounds of the view are, and then place the objects in that world. The math is still the same, but there's much less code. By defining the view to start at 0,0 with a width of 6.4 and a height of 4, you can place the game screen at the left by setting its x value to 0, and move it right as much as you need to by increasing x.
The .lay file would simply be:<mamelayout version="2">
<view name="Left">
<bounds x="0" y="0" width="6.4" height="4" />
<screen index="0">
<bounds x=".4" y="0" width="3" height="4" />
</screen>
</view>
</mamelayout>
As you can see, letting MAME figure out the size based on objects is more flexible because it's not trying to fit a specific screen ratio. On the other hand, defining bounds on the view allows you to more easily place the objects in the space you want to fill.
Note that if you compile your own MAME, you can add this view to your vertical.lay file instead of adding it to each game's artwork. I don't know of any other way to make it available globally. It doesn't appear that MAME looks for a vertical.lay at runtime.
--Nexusmtz