Moving user perspective in Blender with Python
You can use bpy.ops.view3d.view_pan() to do the same as Ctrl+Numpad #, e.g.:

for area in bpy.context.screen.areas:
    if area.type == 'VIEW_3D':
        override = {'area': area, 'region': area.regions[-1]}
        bpy.ops.view3d.view_pan(override, type='PANRIGHT')


The amount of the panning can't be controlled.

If you manipulate the view_matrix (or view_location etc.) directly, there's a lot more control. But you will have to calculate the proper matrices and vectors, and if something went wrong, you may end up with strange view or navigation reaction:

r3d = C.screen.areas[2].spaces[0].region_3d # region_3d of 3D View
r3d.view_matrix.col[3][1:4] # translation part of the view matrix


Have a look at the FPS Fly addon to see what can be done and how:
http://www.ewocprojects.be/fpsfly.html

AFAIK viewport navigation is a bit weird after use, as the addon might manipulate the wrong property to fly around. The C-implementation will be different.