I'm going to address the specifics of your situation instead of the broader question you posed. For the broader case with a team of 5, have a look at this Programmer's question which should provide some additional insight in that case. Hat tip to gnat!
Your case is a little different because you're the only permanent employee and it is a contractor's code that is creating issues for you. Presumably, it will be up to you to maintain this software after the development is complete. So you have an obligation to understand or be able to understand all of the code.
Your first step is to talk with your manager. Objectively explain the issue (your question above is a good starting place but provide more details) and also explain what you have done in order to try and resolve the issue. Then provide a few options for how you think your manager can help you with this case. Your manager controls the contract that pays those contractors. Therefore, your manager has leverage in this situation. You need that leverage on your side.
Next up, you need to schedule code walk-throughs of the senior developers code. Call it cross-training, call it knowledge-transfer, call it whatever. But you need to start learning what the other person is putting in place for the back-end code. And you need to start now before the project starts winding down. Otherwise the contracted senior developer will already be out the door and working on another project and you'll never be able to ask any questions.
From there, you need to work in some of the back-end code as well. This may slow down your overall productivity because you'll need to switch back and forth between areas. You need to make sure your Manager is aware of the possible slow-down and you need their backing (remember the first step I suggested?). The best way to learn a section of code is to start working on it and either adding new features or fixing problems.
Finally, you need to have a conversation with the contracted senior developer and your Manager. You need to lay out the long term prospects of how maintenance is going to work. You can provide the senior developer with a few options. They can start explaining more of their work to you, including teaching you the techniques if necessary. Or they can also start reducing the complexity of the technique they are using. The could also start putting in more comments, even if they feel commentary would be unnecessary. You can remind them that the comments aren't for the original coder, they are for the maintainer.
These are all items that should have been spelled out in the contract-for-labor that was signed to bring the other developers on board. Your team should also have a coding standards document that covers expected levels of documentation and commentary within the code. Some standards documents will forbid particular techniques for whatever reason, which may be appropriate in your case or it may not.
I am assuming the junior developer on the team is also a contractor and won't be retained at the end of the project. If that's correct, then I would talk with your Manager about what the expectations are for the areas that developer will maintain. You can then include the junior developer in the above areas as appropriate based upon your Managers expectations.