You can get a really nice definition of randomness, that reflects our intuition of "unpredictability" by employing some basic concepts from information theory.
The high-level idea is to develop a concept of "compression", using some fixed "compression language". This can be accomplished nicely in terms of the Kolmogorov complexity. Basically, given a language used to describe things (such as English, French, etc), we can talk about compressing a source of bits. For example, if my bit source always dumps out 01010101... where a 0 is always followed by a 1 and vice versa, then we can "compress" an arbitrarily-sized subsequence of this string: "Write '01' 20 times" is shorter than "0101010101010101010101010101010101010101". Let's define $L$ so that $L(0101010101010101010101010101010101010101) =$ "Write '01' 20 times"
Given this notion of compression, we can define a Bernoulli Random Variable to be an infinite sequence of bits $S$ so that, given ANY finite language $L$ (i.e. $L$ has a longest word), there exists an $N$ such that for all $n > N$, the length of $L(s_1s_2s_3...s_n)$ is greater than or equal to the length of $s_1s_2s_3...s_n$ (i.e. $s_1s_2...s_n$ is uncompressible in $L$). Note that this is a bit weird, because the sequence is only Bernoulli "in the limit" in some sense - as we sample more and more bits, it becomes increasingly difficult to describe them without simply "listing them off".
Basically, this means that, given the tools we have at our disposal, we can't "predetermine" what the next bits in the sequence will be, unless our language is so large that we can simply include the entire sequence up to that point in our language. For example, my language could include a one-off definition that "burbawubba := 001010100001010100100101010001010101001". Then, I could compress "001010100001010100100101010001010101001" in my language by simply saying "burbawubba". However, if my language is finite, I eventually have to run out of one-off encodings like this.
We can define many more distributions of random variables in terms of our Bernoulli random variable.
Now, of course, whether an actual physical source of bits that satisfy this property exist in the real world is another question entirely. Still, we can achieve a sort of "essentially random" that is satisfactory in all the ways we would like by simply limiting the size of our language to some reasonable number. If we limit our language to English, then we can simply go out as far as the requisite $N$, at which point the bits in the sequence essentially have no substantial relationship to anything that you can put into words. This is usually good enough for most applications - Your sequence of coin flips can't possibly be described in terms of factors concerning the demographics or health history of that group you're sampling for medical research. So, in that sense, it's "essentially random".