1. storage - объявили, но не используете, надо: 
bot = telebot.TeleBot('TOKEN', state_storage=storage)
2. Состояние не меняете.
3. В интернете логичнее всего смотреть примеры в репе создателей: 
custom_states.
4. Код:
import telebot
from telebot import types
from telebot.states import State, StatesGroup
from telebot.states.sync.context import StateContext
from telebot.states.sync.middleware import StateMiddleware
from telebot.storage import StateMemoryStorage
from telebot.types import ReplyParameters
storage = StateMemoryStorage()
bot = telebot.TeleBot('TOKEN', state_storage=storage, use_class_middlewares=True)
class MyStates(StatesGroup):
    START = State()
    US = State()
    SUP = State()
@bot.message_handler(commands=["start"])
def start(message: types.Message, state: StateContext):
    state.set(MyStates.START)
    bot.send_message(
        message.chat.id,
        f'Привет, {message.from_user.first_name}!\n/sup - оформить подписку\n/us - информация о нас',
        reply_parameters=ReplyParameters(message_id=message.message_id),
    )
@bot.message_handler(commands=["us"])
def us(message: types.Message, state: StateContext):
    state.set(MyStates.US)
    bot.send_message(
        message.chat.id,
        'Информация о нас',
        reply_parameters=ReplyParameters(message_id=message.message_id),
    )
@bot.message_handler(commands=["sup"])
def sup(message: types.Message, state: StateContext):
    state.set(MyStates.SUP)
    bot.send_message(
        message.chat.id,
        'Оформить подписку',
        reply_parameters=ReplyParameters(message_id=message.message_id),
    )
if __name__ == '__main__':
    print('start')
    bot.setup_middleware(StateMiddleware(bot))
    bot.infinity_polling()