AWS CodePipeline staged deployments
I managed to setup an environment that does what I described above. Here are the full details:


Launch a template that creates a CodeCommit repository for the
application. This repository will be used to store both the source
code and the CloudFormation (CF) templates to create the required
infrastructure for the application;
Launch a template that creates a CodePipeline pipeline for the
application. The pipeline will deploy a stack for the infrastructure
and one for deploying the code through CodeDeploy (the CodeDeploy
stack will will create a new CodeDeploy Application and deployment
group, and will deploy the latest code to the infrastructure created
previously)


The pipeline has a paramater "StackBlueeGreen" that is used to determine whether the stack is the Green or the Blue version.

When the pipeline runs successfully, it will create a separate infrastructure 


  (NameOfTheApplication-B or NameOfTheApplication-G)


and deploy the code there. The second infrastructure will have its own load balancer listener rule setup with a staging URL 


  (something like URLOfTheApplication-staging.somedomain.co.uk)


This allows developers to test the new version of the application withuot affecting the previous version. Once developers are happy with the new version, the listener rules for the old and new infrastructure need to be changed manually so that users are now directed to the new infrastructure. If there is an issue with the new version, rolling back is as simple as swapping the load balancer listener rules again.

Finally, the pipeline stack need to be updated: the StackBlueGreen parameter needs to be switched to G/B depending on how it is currently set. If this is not done, next time there is a change, the new version will be deployed on the same infrastructure.

[The setup described above works very well and meets all the requirements outlined in the OP.
An improvement that I would really like to implement is automating the switching of the load balancer listener rule, deletion of the old infrastructure and updating the pipeline stack. I will add to this question if I manage to implement this improvement.
Meanwhile, any input would be much appreciated!]