I tried the new Raspberry Pi 2 and now it runs even faster, but I still have flickering problems in scrolling big sprites, it's like having vsync or duoble buffer might fix the issue. I'm a newbie in pygame/python so I don't have idea how can I force it.
Yes, vsync would fix tearing but it is not available with software surfaces. You probably should forget about vsync with pygame and accept some degree of tearing. You can limit your game's fps close to the refreshing rate of your display (or half of it), but it is not very exact.
I'm not sure what you mean with 'flickering'. If it means 'flashing on and off', I don't think that that would be normal when using software surfaces.
You could install the game solarwolf on your pi 2, just to see what is possible with Pygame. It is made by the guy who started the Pygame project. I don't think that it uses hardware surfaces (at least on Linux systems). There is quite a lot of action on the screen but not any big sprites. Maybe tearing becomes easily visible with bigger moving sprites but is not so noticeable with smaller sprites.
davef21370 mentioned updating only the parts of the surface which have actually changed. The more pixels to update on the screen, the more CPU cycles it takes. I noticed that this also applies to drawing shapes on the screen: Drawing a big filled rectangle demands more from the CPU than drawing a small filled rectangle. I have not tested this, but it could very well apply to blitting also. (This means also that if your game is on a smaller resolution screen, it will be easier on the CPU. Unfortunately I don't think that you can change fullscreen resolution on the fly with the PI.) So, with Pygame you have to be economical in designing a game, and minimize the amount of pixels that needs to be drawn, blitted and updated with every frame.