Yes, you can use an off-axis projection matrix.
This is what I use in my code (note: I shift the centre upwards, not left as you do in your example.)
void camera_setAspectRatio(float aspect, float zNear, float zFar, bool offaxis)
{
// create a projection matrix
const float f = 1.0f / tanf(fovy_radians/2.0f);
fovx_radians = 2.0f * atanf( aspect * tanf(fovy_radians/2.0f) );
float* mout = proj.data;
mout[0] = f / aspect;
mout[1] = 0.0f;
mout[2] = 0.0f;
mout[3] = 0.0f;
mout[4] = 0.0f;
mout[5] = f;
mout[6] = 0.0f;
mout[7] = 0.0f;
mout[8] = 0.0f;
mout[9] = offaxis ? -0.25f : 0.0f; // off axis projection!
mout[10] = (zFar+zNear) / (zNear-zFar);
mout[11] = -1.0f;
mout[12] = 0.0f;
mout[13] = 0.0f;
mout[14] = 2 * zFar * zNear / (zNear-zFar);
mout[15] = 0.0f;
}
Stereo Projection screens (not head-mounted) tend to use Off-Axis projection matrices as well. Paul Bourke has a great write up on these projections.