Just in case anybody else needs a quick solution to my (admittedly) very specific problem.
I used the animation storage to buffer my rectangle and then transferred it 1 pixel to the left to the framebuffer again like so:
touchgfx::Rect rectToShift(this->x+1, this->y, this->width-1, this->height);
uint16_t* anim_ptr = touchgfx::HAL::getInstance()->getAnimationStorage();
anim_ptr = touchgfx::HAL::getInstance()->copyFBRegionToMemory(rectToShift, anim_ptr, (uint32_t) rectToShift.width);
touchgfx::HAL::getInstance()->blitCopy(anim_ptr, this->x, this->y, this->width-1, this->height, (uint16_t) rectToShift.width, 255, true);
for this to work the animation storage has to be used by modifying hal.setFrameBufferStartAddress() in BoardConfiguration (this is all for the F469I-DISCO Board).
Obviously having two copy operations is not ideal, but it works fine.
Another solution I would have liked to use is shifting the bytes in the framebuffer without using animationStorage like so:
touchgfx::Rect rectToShift(this->x+1, this->y, this->width-1, this->height);
uint16_t* fb;
fb = (uint16_t*) touchgfx::HAL::getInstance()->lockFrameBuffer();
touchgfx::HAL::getInstance()->blitCopy(fb + (this->y * 800) + (this->x), this->x, this->y, this->width-1, this->height, (uint16_t) 800, 255, true);
touchgfx::HAL::getInstance()->unlockFrameBuffer();
Unfortunately I soon realized that this does not work for me because I am using the 24bpp format. Having a 16-bit pointer to the framebuffer splits every second pixel in two. I have not found another method to work around this.