The problem with machine learning is the model. The model dictates what will be predicted. You can use a J48 decision tree to model your data and then you can find the best possible configuration for this J48 decision tree (i.e. the one that makes the most accurate decisions). You can even use a tournament model which uses many different models, but the model is still be whatever your composite, finite, models are.
If you look at scientific history you see that it is the models that make breakthroughs--that extend our understanding of nature. The Ancient Greeks had a model of epicycles which explained the orbits of the planets, then Copernicus explained it differently (a different model) which then led to Newton's theory of gravity--then Einstein created a new model, the model of General Relativity.
So your "self-learning" algorithm must be able to come up with new "remarkable" models--models which use a different logic from previous ones. This logic cannot be known a priori and thus must come through random chance. A computer with infinite computing power and infinite memory could try all possible models and choose the correct one from all of these. Obviously such a program would not realistically compute the correct model in a realistic time frame (as in the age of the universe). You could try some sort of "greedy" algorithm which tries only models which support known "good" models. But, in doing so, you would rule out all models which are completely unlike previously tried models.
If you were to honestly look at current research, this is how it is done. New people come in with new models, most of which are complete nonsense. However, every so often, a new person comes up with a new model which does solve the problem previously unsolvable.
If you really want to create a self-learning algorithm, you have to do two things: 1) you have to create an algorithm capable of asking any question and 2) you have to create an algorithm capable of solving an arbitrary question. It becomes recursive then: if the algorithm can solve an arbitrary question, then it can solve the problem of generating an arbitrary question, then it can solve that problem better and better (as it recurses). Each problem generates questions, which it can then solve recursively.