In a word: Swiping.
I played Pac-Man championship edition on my Android phone and what I thought really worked for it is that while there was an on screen joystick, you didn't actually have to touch it to move Pac-Man in the proper direction. If your finger fell off the joystick it didn't matter. All that mattered is in what direction you moved your finger.
To move up, swipe up.
To move down, swipe down.
To move left, swipe left.
To move right, swipe right.
You could just as easily make swiping context sensitive to screen regions and actions currently happening within the game. Imagine your phone is in landscape mode and you are holding it like a video game controller. The left half of the screen could be reserved for movement using the swiping I describe above. The right half of the screen could be used for actions such as jumping, shooting, shielding, whatever game play abilities you want to give your player using swiping in a very similar fashion. Or if you only have one ability (like jumping in Super Meat Boy) - just treat the right half of the screen as a button.
We were discussing this in chat and it appeared that my solution, the way its described above is a lot like a virtual stick that moves when you lift up and place down your finger. I want to elaborate that this is not the case and is actually much more flexible than that.
The image above shows the swiping pattern one could take to move Pacman around on the board. Note that the action that is taken is not at all based on where you place your finger down the first time. If you accidentally move your finger too far when swiping right or not enough when swiping down, its ok. With this implementation as long as you swiped far enough for it to register properly with the software it will take it and use where your finger ended up as the next starting point, or if you lift your finger off, it will use the next place you put your finger down.
As I said before, you could apply this to a platformer just by splitting controls into separate regions so that that your swipes and taps do different things depending on where on the screen you performed the action. The obvious route is make the left side handle movement just using swiping. Then the right side would be used to handle actions and abilities of the player using any combination of swipes and taps.