Since the EVM instruction set is Turing-complete, any conceivable program (computable function) can be implemented in the EVM instruction set itself and thus also in Solidity. Because of the current gas model, this might be really expensive, though. With progress in interpreters and a potential change in and of the EVM, the block gas limit (essential upper limit of how much can be done synchronously in a transaction) should increase in the future, but it might be still out of reach.

The question is: Why would someone write a Solidity compiler in Solidity?

Many compilers are self-hosted which means that they can compile themselves or a newer version of themselves. This is especially beneficial for general-purpose languages, because it removes an external dependency on another language and it also helps designing the language if you write a large project like a compiler in the language itself.

For special-purpose languages like Solidity, the above arguments are not too relevant, though. What is important for Solidity, is that the compilation can be either run on chain or at least verified on chain. This does not necessarily require the compiler to be written in Solidity. The advantage of verifying the compilation on the blockchain would be that source verification (checking that a given contract on the blockchain has a certain source code) does not have to be repeated by every user and you can just trust the blockchain to do it.

The latter is actually planned and can be done using interactive verification. The key idea there is that during the compilation, a transcript of the compilation run is generated and published (on e.g. swarm). Put simply, the transcript starts with the source code, has a lot of data in between and ends with the bytecode. If it is incorrect, you can point at a specific position inside the transcript and check that there was a mistake by just comparing some bytes. If nobody finds a mistake after some time, the system accepts the compilation as correct. The load (gas costs) of the blockchain is negligible in this mode of operation.