A qubit is not a bit that is both values. It is a system whose state is described by two complex numbers — amplitudes — whose squared magnitudes give the probability of measuring zero or one. The amplitudes are the point. They carry a phase as well as a magnitude, and phase is what makes quantum computation different from probabilistic classical computation.
Superposition is a description, not a resource. A register of n qubits is described by 2ⁿ amplitudes, which is where the “exponential” language comes from. But you cannot read those amplitudes. Measuring the register collapses it to a single n-bit string, chosen according to those probabilities. If all you do is put a register into superposition and measure it, you have built an expensive random number generator.
Interference is the actual mechanism. A useful quantum algorithm arranges its operations so that amplitudes leading to wrong answers cancel — they have opposite phases and sum to near zero — while amplitudes leading to the right answer reinforce. When you measure, you are overwhelmingly likely to get the answer you engineered toward. Designing that cancellation is the hard part, and it is why quantum algorithms are rare rather than plentiful: only a few problem structures admit one.
Entanglement is a correlation between qubits with no classical analogue — the joint state cannot be written as a description of each qubit separately. It is what allows an operation on one qubit to affect the interference pattern of the whole register, and it is a necessary ingredient in any algorithm with a real quantum speedup.
Decoherence is why this is hard. A qubit's phase relationship with its neighbours is fragile. Interaction with the environment — heat, vibration, stray fields — destroys it. Real qubits hold usable coherence for a very short time and every gate applied introduces error. The number of operations you can perform before the signal is buried is the practical limit on what today's machines can compute, and it is small.