Assuming you're building a ROP chain that needs to manipulate the stack, you can always go for semantically equivalent gadgets, e.g. PUSH/POP, MOV ESP XXX, (SUB,ADD) ESP instructions to build the stack:
https://www.corelan.be/index.php/2010/06/16/exploit-writing-tutorial-part-10-chaining-dep-with-rop-the-rubikstm-cube/#chainingbasics
http://neilscomputerblog.blogspot.com/2012/06/stack-pivoting.html
Also, for XXX/actual constants (immediates) for SUB/ADD ESP XXX, you can always LEA a register then even MOV ESP, XXX/REG:
https://web.archive.org/web/20171107030509/http://x86.renejeschke.de/html/file_module_x86_id_176.html
Last, depending on the DLL/EXE you're searching for gadgets in, if you can't easily ADD/SUB ESP you could do a slew of things (using volatile registers):
;ADD/INC ESP SEMANTICS EQUIVALENT
POP EBX ;semantically same as MOV EBX, ESP; ADD ESP 0x4
XOR EBX, EBX ;zeroes EBX if you wanna reuse the register
;SUB/DEC ESP SEMANTICS EQUIVALENT
PUSH EBX ;semantically same as MOV ESP, EBX; SUB ESP 0x4
You can even get fancy and mov values into a volatile register, SHL/SHR/ROL/ROR it and then use LEA/PUSH. It's all up to you to be creative!